`if __name__ =='__ main __'`相当于Ruby

时间:2010-02-12 02:30:28

标签: python ruby main

我是Ruby新手。我想从包含我想要继续单独使用的工具的模块导入函数。在Python中我只想这样做:

def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()

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

3 个答案:

答案 0 :(得分:124)

从我在野外看到的Ruby(授予,而不是吨),这不是标准的Ruby设计模式。模块和脚本应该保持独立,所以如果没有一个好的,干净的方法,我不会感到惊讶。

编辑: Found it.

if __FILE__ == $0
    foo()
    bar()
end

但这绝对不常见。

答案 1 :(得分:11)

如果堆栈跟踪为空,我们可以开始向右和向左执行。我不知道这是用于传统还是非传统的,因为我已经使用Ruby大约一周了。

if caller.length == 0
  # do stuff
end

概念证明:

file:test.rb

#!/usr/bin/ruby                                                                 

if caller.length == 0
  puts "Main script"
end

puts "Test"

file:shmest.rb

#!/usr/bin/ruby -I .                                                            

require 'test.rb'

puts "Shmest"

用法:

$ ./shmest.rb 
Test
Shmest

$ ./test.rb
Main script
Test

答案 2 :(得分:3)

if $PROGRAM_NAME == __FILE__
  foo()
  bar()
end 
Rubocop首选

if __FILE__ == $0
    foo()
    bar()
end