在 Ruby 中等同于 `if __name__ == '__main__'`。

18 浏览
0 Comments

在 Ruby 中等同于 `if __name__ == '__main__'`。

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

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

这样我就可以运行程序,或者导入它作为模块,以分别使用 a() 和/或 b()。在 Ruby 中相应的范例是什么?

admin 更改状态以发布 2023年5月20日
0
0 Comments

如果堆栈跟踪为空,我们可以开始向右和向左执行。 我不知道这是传统用法还是非传统用法,因为我学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

0
0 Comments

从我在野外见过的 Ruby(虽然不是很多),这不是标准的 Ruby 设计模式。模块和脚本应该保持分开,因此如果没有真正的好的、干净的方法来实现这个功能,我不会感到惊讶。

编辑:找到了。

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

但这绝对不是常见的。

0