كيف يمكن أن يكتشف البرنامج النصي ل Ruby أنه يعمل في IRB؟

StackOverflow https://stackoverflow.com/questions/2226979

  •  19-09-2019
  •  | 
  •  

سؤال

لدي برنامج نصي روبي يحدد الفصل. أود تنفيذ البرنامج النصي

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> 

نصائح أخرى

استخدام $ 0.

في IRB قيمة 0 $ هي "IRB"

في الملف الخاص بك هو "/ المسار / إلى / ملف"

تفسير هنا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top