我是红宝石的新手。我正在寻找从包含我想继续单独使用的工具的模块中导入函数。在 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