`if __name__ == '__main__'` equivalent in Ruby
我对鲁比不熟悉。我想从一个模块中导入函数,这个模块包含一个我想继续单独使用的工具。在python中,我只需执行以下操作:
1 2 3 4 5 6 7 | def a(): ... def b(): ... if __name__ == '__main__': a() b() |
这允许我运行程序或将其作为模块导入,以便单独使用
从我在野外看到的Ruby(当然,不是一吨),这不是一个标准的Ruby设计模式。模块和脚本应该保持分离,所以如果没有一种真正好的、干净的方式来完成这项工作,我不会感到惊讶。
编辑:找到它。
1 2 3 4 | if __FILE__ == $0 foo() bar() end |
但这绝对不常见。
如果堆栈跟踪为空,则可以从右到左开始执行。我不知道这是传统的还是非传统的,因为我在Ruby工作了大约一周。
1 2 3 | if caller.length == 0 # do stuff end |
概念证明:
文件:Test.RB
1 2 3 4 5 6 7 | #!/usr/bin/ruby if caller.length == 0 puts"Main script" end puts"Test" |
文件:Smith.RB
1 2 3 4 5 | #!/usr/bin/ruby -I . require 'test.rb' puts"Shmest" |
用途:
1 2 3 4 5 6 7 | $ ./shmest.rb Test Shmest $ ./test.rb Main script Test |