我是Ruby的新手。我正在尋找從包含我想要單獨繼續使用的工具的模塊導入函數。在Python我只想做到這一點:`如果__name__ =='__main __'`等效於Ruby
def a():
...
def b():
...
if __name__ == '__main__':
a()
b()
這樣我就可以運行的程序或導入它作爲一個模塊來使用a()
和/或b()
分開。 Ruby中的等效範例是什麼?
我是Ruby的新手。我正在尋找從包含我想要單獨繼續使用的工具的模塊導入函數。在Python我只想做到這一點:`如果__name__ =='__main __'`等效於Ruby
def a():
...
def b():
...
if __name__ == '__main__':
a()
b()
這樣我就可以運行的程序或導入它作爲一個模塊來使用a()
和/或b()
分開。 Ruby中的等效範例是什麼?
從我在野外見過的Ruby(授予,不是一噸),這不是標準的Ruby設計模式。模塊和腳本應該保持獨立,所以我不會感到驚訝,如果沒有一個很好的,乾淨的方法來做到這一點。
編輯:Found it.
if __FILE__ == $0
foo()
bar()
end
但它絕對不是常見。
如果堆棧跟蹤爲空,我們可以開始執行到左側和右側。我不知道這是常規還是非常規使用,因爲我進入Ruby一週左右。
if caller.length == 0
# do stuff
end
概念證明:
文件:test.rb
#!/usr/bin/ruby
if caller.length == 0
puts "Main script"
end
puts "Test"
文件:shmest.rb
#!/usr/bin/ruby -I .
require 'test.rb'
puts "Shmest"
用法:
$ ./shmest.rb
Test
Shmest
$ ./test.rb
Main script
Test
[從命令行運行Ruby庫]的可能重複(http://stackoverflow.com/questions/487086/run-a-ruby-library-from-the-command-line) – 2011-08-17 03:18:17