关于python:ruby中的if __name__ == __main__等价物

`if __name__ == '__main__'` equivalent in Ruby

我对鲁比不熟悉。我想从一个模块中导入函数,这个模块包含一个我想继续单独使用的工具。在python中,我只需执行以下操作:

1
2
3
4
5
6
7
def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()

这允许我运行程序或将其作为模块导入,以便单独使用a()和/或b()。Ruby中的等价范例是什么?


从我在野外看到的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