`如果__name__ =='__main __'`在Ruby中是等价的
我是Ruby的新手。 我正在寻找从包含我想要继续单独使用的工具的模块导入函数。 在Python中,我只需要这样做:
def a(): ... def b(): ... if __name__ == '__main__': a() b()
这允许我运行该程序或将其作为模块导入,以单独使用a()
和/或b()
。 Ruby中的等价范例是什么?
从我在野外见过的ruby(已经批准,不是一吨),这不是一个标准的Rubydevise模式。 模块和脚本应该保持独立,所以我不会感到惊讶,如果没有一个很好的,干净的方式来做到这一点。
编辑: find它。
if __FILE__ == $0 foo() bar() end
但是这绝对不是常见的。
如果堆栈跟踪是空的,我们可以开始执行到左侧和右侧。 我不知道这是常规还是非常规使用,因为我进入Ruby一个星期左右。
if caller.length == 0 # do stuff end
概念validation:
file: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