2010-03-17 12 views
38

मैं `` आवश्यकता 'से बचाव करने की कोशिश कर रहा हूं: क्रम में उपयोगकर्ता को संकेत देने के लिए रूबी में लोड करने के लिए ऐसी कोई फ़ाइल नहीं है- यदि वह ऐसा करने के लिए भूल गया है तो मैं ध्वज निर्दिष्ट करता हूं। मूल रूप से कोड लगता है:मैं 'आवश्यकता' से कैसे बचूं: ऐसी कोई फ़ाइल रूबी में लोड करने के लिए नहीं है?

begin 
    require 'someFile.rb' 
rescue 
    puts "someFile.rb was not found, have you" 
    puts "forgotten to specify the -I flag?" 
    exit 
end 

मैं rescue हिस्सा नहीं मिला था मामला someFile.rb में निष्पादन पर कब्जा करने की उम्मीद है, लेकिन मेरी धारणा गलत था।

उत्तर

52

बचाव तर्क के बिना केवल StandardError रों बचाता है। लोडरर (जिसे फ़ाइल नहीं मिली है) मानक एरर नहीं है लेकिन ScriptError (http://blog.nicksieger.com/articles/2006/09/06/rubys-exception-hierarchy देखें)। इसलिए आपको लोडरर को स्पष्ट रूप से बचाव करना होगा, क्योंकि एमबीओ ने संकेत दिया था।

47

आपको स्पष्ट रूप से परिभाषित करना होगा कि आप किस त्रुटि से बचाव करना चाहते हैं।

begin 
    require 'someFile.rb' 
rescue LoadError 
    puts "someFile.rb was not found, have you" 
    puts "forgotten to specify the -I flag?" 
    exit 
end