我应该在ruby脚本中定义一个main方法吗?

时间:2009-02-24 17:29:12

标签: ruby main-method

在python中,模块没有具有main函数,但通常的做法是使用以下习语:

def my_main_function():
    ... # some code

if __name__=="__main__":  # program's entry point
    my_main_function()

我知道Ruby也没有 拥有main方法,但是我应该遵循某种最佳实践吗?我应该将我的方法main命名为什么?

Wikipedia page about main methods并没有真正帮助我。


作为旁注,我在python中也看到了以下习语:

def my_main_function(args=[]):
    ... # some code

if __name__=="__main__":  # program's entry point
    import sys
    sys.exit(my_main_function(sys.argv))

5 个答案:

答案 0 :(得分:76)

我通常使用

if __FILE__ == $0
  x = SweetClass.new(ARGV)
  x.run # or go, or whatever
end

是的,你可以。这取决于你在做什么。

答案 1 :(得分:49)

我总是发现$PROGRAM_NAME比使用$0更具可读性。有一半时间,我看到像这样的“Perl-like”全局变量,我必须去查找它们。


if __FILE__ == $PROGRAM_NAME
  # Put "main" code here
end

答案 2 :(得分:9)

您应该将库代码放在bin /中需要库代码的lib /和可执行文件中。这具有与RubyGems的打包方法兼容的额外优势。

一个常见的模式是lib / application.rb(或者最好是一个更适合你域名的名称)和bin / application,它包含:

require 'application'
Application.run(ARGV)

答案 3 :(得分:3)

我个人的经验法则是:当下

if __FILE__ == $0
    <some code>
end

超过5行,我将其提取到main函数。这适用于Python和Ruby代码。没有那个代码,看起来结构不合理。

答案 4 :(得分:-1)

没有

为什么要添加额外的复杂层才能获得真正的好处?使用它的Rubyist没有惯例。

我会等到第二次你需要使用它(这可能比你想象的更少发生)然后重构它以便它可以重复使用,这可能涉及如上所述的构造。