`如果__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