2011-04-27 14 views
7

FakeProfilePictures::Photo.all_large_names_2x (नीचे परिभाषित) पूर्ण पथ नामों की एक सरणी देता है, लेकिन जब मैं Dir["picture_*@2x.*"]irb में सही निर्देशिका से करता हूं, तो मुझे केवल बेसनाम (जो मैं चाहता हूं) प्राप्त करता हूं। आधार नाम पाने का सबसे अच्छा तरीका क्या है? मुझे पता है कि मैं टिप्पणी में दिखाए गए अनुसार .map { |f| File.basename(f) } जोड़ कर ऐसा कर सकता हूं, लेकिन क्या कोई आसान/better/faster/stronger तरीका है?रूबी डिर # ग्लोब को बेसनेम वापस करने के लिए कैसे प्राप्त करें, absolute_paths नहीं?

module FakeProfilePictures 
    class Photo 
    DIR = File.expand_path(File.join(File.dirname(__FILE__), "photos")) 

    # ... 

    def self.all_large_names_2x 
     @@all_large_names_2x ||= Dir[File.join(DIR, "picture_*@2x.*")] # .map { |f| File.basename(f) } 
    end 
    end 
end 

उत्तर

19

आप ब्लॉक के बाद

Dir.chdir(DIR) do 
    Dir["picture_*@2x.*"] 
end 

कर सकते हैं, मूल निर्देशिका बहाल है।

+0

अच्छा। '@@ all_large_names_2x || = Dir.chdir (डीआईआर) {Dir [" चित्र _ * @ 2x। * "]} 'काम किया! धन्यवाद! मुझे लगता है कि मैं उस कारण से जाऊंगा क्योंकि यह कम कोड है और शायद तेज़ है? कौन जाने... – ma11hew28

2

आप DIR में chdir ग्लोबिंग से पहले, लेकिन मैं तो बस सब कुछ basename के माध्यम से चलाने होगा सकता है।

+0

क्यों? उपरोक्त @ जे -_-एल के समाधान के बारे में क्या? मुझे लगता है कि मैं इसे पसंद करता हूँ। – ma11hew28