2011-03-01 15 views
45

निम्नलिखित क्या कर रहा है, और यह पृष्ठ के शीर्ष पर क्यों है?

$:.unshift File.dirname(__FILE__) 

https://github.com/mojombo/jekyll/blob/master/lib/jekyll.rb

+8

रूबी के सबसे उग्र बिट्स में से एक का सामना करने के लिए सहानुभूति में +1। संबंधित प्रश्न: http://stackoverflow.com/questions/1395688/unshift-file-join-in-ruby –

उत्तर

51

यह लोड पथ के लिए वर्तमान फ़ाइल की निर्देशिका जोड़ने है। $: लोड पथ का प्रतिनिधित्व करता है (जो एक सरणी है) और unshift सरणी की शुरुआत में प्रीपेड करता है।

कारण यह है कि (और शीर्ष पर) ऐसा है कि उन सभी को पथ के बारे में चिंता करने की आवश्यकता नहीं है।

7

तकनीकी रूप से यह फाइल के पथ को जोड़ने के लिए रूबी का उपयोग करने वाले लोड पथ की पहली प्रविष्टि के रूप में फ़ाइल का पथ जोड़ रहा है। $: एक जादू चर है और अधिक स्पष्ट रूप से $ LOAD_PATH द्वारा संदर्भित है।

ruby-1.9.2-p136 > $LOAD_PATH 
=> ["/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 
ruby-1.9.2-p136 > $: 
=> ["/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 
ruby-1.9.2-p136 > $:.unshift '.' 
=> [".", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1", "/Users/wesbailey/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0"] 
+0

मुझे पता है कि यह एक बहुत पुराना सवाल था, लेकिन पूंछ के बजाए इसे सिर में जोड़ने का कोई कारण है (पुश के साथ, कहो)? क्या ऐसा है कि एक संघ में समान नाम वाली फाइलों पर एक तरह से प्राथमिकता लेती है? (एक हॉटफिक्स फ़ोल्डर)। – mckenzm

+0

@mckenzm हां। आप इसे सिर में जोड़ते हैं क्योंकि आप वर्तमान निर्देशिका में फ़ाइल को लोड पथ में पहले खोजना चाहते हैं। लोड पथ को फ़ाइलों की तलाश करते समय पहले से आखिरी तक क्रमबद्ध किया जाता है। – Wes

+0

यही वह है जिसे मैं चला रहा था, इसलिए विकास के लिए, यूनिट परीक्षण निर्देशिकाएं एकीकरण परीक्षण निर्देशिका आदि पर प्राथमिकता लेती हैं। – mckenzm

3

यह करने के लिए सभी परियोजना में इस्तेमाल की आवश्यकता होती है, शीर्ष पर यह जोड़ने के बाद हम फ़ाइल पथ तो हमारे लिए आवश्यक के बारे में परेशान करने के लिए की जरूरत नहीं है सभी फाइल हम कर रहे हैं वर्तमान कार्यशील निर्देशिका पथ को जोड़ने, लेकिन आवश्यकता एक ही निर्देशिका में होनी चाहिए जहां हमारे मुख्य कार्यक्रम को अन्य फाइलों की आवश्यकता होती है।

$: पथ लोड करने के लिए आरक्षित कुंजी शब्द है।

संबंधित मुद्दे