我是Ruby的新手。我想从一个包含我想要继续单独使用的工具的模块中导入函数。在Python中,我只需要执行以下操作:
def a():
...
def b():
...
if __name__ == '__main__':
a()
b()
这使我能够运行该程序或导入它作为模块以单独使用 a()
和/或 b()
。在Ruby中有类似的范例吗?
我是Ruby的新手。我想从一个包含我想要继续单独使用的工具的模块中导入函数。在Python中,我只需要执行以下操作:
def a():
...
def b():
...
if __name__ == '__main__':
a()
b()
这使我能够运行该程序或导入它作为模块以单独使用 a()
和/或 b()
。在Ruby中有类似的范例吗?
根据我在野外(虽然不多)看到的 Ruby,这不是标准的 Ruby 设计模式。模块和脚本应该保持分离,因此如果没有真正好的、干净的方法来做到这一点,我也不会感到惊讶。
编辑:找到了。
if __FILE__ == $0
foo()
bar()
end
但这绝对不是常见情况。
如果调用堆栈为空,我们可以开始向右和左执行。我不知道这是否被传统或非传统方式使用,因为我接触 Ruby 已经有一个星期了。
if caller.length == 0
# do stuff
end
概念证明:
文件: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
if $PROGRAM_NAME == __FILE__
foo()
bar()
end
相对于此代码:
Rubocop 更倾向于使用它。if __FILE__ == $0
foo()
bar()
end