2010-04-26 29 views
31

मैंने इस लाइन के साथ रूबी कोड के कई नमूने देखे हैं (उदाहरण के लिए, http://www.sinatrarb.com/)। इसके लिए क्या उद्देश्य है?'rubygems' की आवश्यकता है

# require 'rubygems' 
require 'sinatra' 
get '/hi' do 
    "Hello world!" 
end 

सभी मामलों में कोड इस लाइन के बिना काम करता है।

उत्तर

14

यह अक्सर अनिवार्य है। gem कमांड के साथ, यह आपको विशेष रत्न के विशिष्ट संस्करणों की आवश्यकता होगी।

http://guides.rubygems.org/patterns/#requiring_rubygems

+0

रूबीजम्स अनुसरण करने वाले रत्नों के नवीनतम स्थापित संस्करण का चयन करेंगे। यदि ऐसा कोई सॉफ़्टवेयर नहीं मिला है, तो अपवाद उत्पन्न होता है। – lkahtz

+0

यह अनिवार्य क्यों है? एक आवश्यक मणि लोड करने का यह सबसे अच्छा तरीका है। –

+2

असल में, "रूबीजम्स 'की आवश्यकता होती है" एक आवश्यक मणि लोड नहीं करता है, यह केवल "आवश्यकता" विधि के व्यवहार को संशोधित करता है। –

21

require 'rubygems' एक LoadError: no such file to load -- sinatra प्राप्त किए बिना, आप सफलतापूर्वक जवाहरात आप rubygems के माध्यम से स्थापित की आवश्यकता होती है करने के लिए अनुमति रूबी loadpath को समायोजित करेगा।

rubygems-1.3.6 प्रलेखन से:

जब RubyGems की आवश्यकता है, कर्नेल # की आवश्यकता होती है हमारे अपने जो मांग पर जवाहरात लोड हो रहा है के लिए सक्षम है साथ बदल दिया है। यह है

  • फ़ाइल मौजूदा रूबी loadpath से लोड किया जा सकता है, तो:

    जब आप 'एक्स' की आवश्यकता होती है कहते हैं, तो ऐसा होता है।

  • अन्यथा, मैचों की एक फ़ाइल के लिए स्थापित रत्नों की खोज की जाती है। यदि यह मणि 'वाई' में पाया जाता है, तो यह मणि सक्रिय होता है (लोडपैथ में जोड़ा जाता है)।

सामान्य झूठी लौटने अगर उस फ़ाइल पहले से ही लोड किया गया है संरक्षित है की कार्यक्षमता की आवश्यकता है।

यह समझने के लिए Kernel#require के लिए प्रलेखन देखें।

+7

बीटीडब्ल्यू, मैं इसकी अनुशंसा नहीं करता हूं। रयान टोमाको द्वारा इस पोस्ट को देखें: http://gist.github.com/54177 –

+1

@ कारमेन पाओलिनो, आपकी टिप्पणी के बारे में: सिनात्रा एक मणि है। यह सुनिश्चित करने का सबसे अच्छा तरीका क्या है कि इसकी आवश्यकता है 'आवश्यकता' rubygems'' का उपयोग किये बिना त्रुटि उत्पन्न नहीं करता है? –

+7

रूबी 1.9 'की आवश्यकता है "rubygems" स्वचालित रूप से होता है। पिछले Rubies में rubygems स्वचालित रूप से आवश्यक नहीं है और आपको त्रुटि मिल जाएगी। आपकी सबसे अच्छी शर्त यह है कि जब तक आप सुनिश्चित न हों कि आप हमेशा 1.9+ में चल रहे हैं, तब तक इसे स्वचालित रूप से टाइप करना है। यदि आपको इसे 1.9+ में दो बार चाहिए तो रूबी परवाह नहीं होगा और आपका कोड 1.8 में भी खुश होगा। –

11

पूर्व (और सही उत्तरों) के अतिरिक्त के रूप में: रुबी 1.9 और रुबीगैम्स के साथ नया जहाज अंतर्निहित है, इसलिए require 'rubygems' की वास्तविक आवश्यकता नहीं है। Source here

+1

आप सही हैं, जब तक रूबी '-disable-rubygems' के साथ नहीं बना है। – xoryves

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