كيف يمكن أن يكتشف البرنامج النصي ل Ruby أنه يعمل في IRB؟
سؤال
لدي برنامج نصي روبي يحدد الفصل. أود تنفيذ البرنامج النصي
BoolParser.generate :file_base=>'bool_parser'
فقط عند استدعاء البرنامج النصي كقابل تنفيذي، وليس عندما يكون require
'D من IRB (أو مرر في سطر الأوامر عبر -r
). ما الذي يمكنني التفاف حول البيان أعلاه لمنعه من التنفيذ كلما تم تحميل ملف Ruby الخاص بي؟
المحلول
الحالة $0 == __FILE__
...
!/usr/bin/ruby1.8
class BoolParser
def self.generate(args)
p ['BoolParser.generate', args]
end
end
if $0 == __FILE__
BoolParser.generate(:file_base=>__FILE__)
end
... صحيح عندما يتم تشغيل البرنامج النصي من سطر الأوامر ...
$ /tmp/foo.rb
["BoolParser.generate", {:file_base=>"/tmp/foo.rb"}]
... ولكن خطأ عند حاجة الملف أو تحميله بواسطة برنامج نصي آخر روبي.
$ irb1.8
irb(main):001:0> require '/tmp/foo'
=> true
irb(main):002:0>
نصائح أخرى
لا تنتمي إلى StackOverflow