50

在 python 中,一个模块不必一个 main 函数,但通常的做法是使用以下成语:

def my_main_function():
    ... # some code

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

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

关于主要方法的维基百科页面并没有真正帮助我。


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

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

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

5 回答 5

78

我通常使用

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

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

于 2009-02-24T17:31:21.277 回答
51

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


if __FILE__ == $PROGRAM_NAME
  # Put "main" code here
end
于 2009-05-14T03:25:25.210 回答
10

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

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

require 'application'
Application.run(ARGV)
于 2011-01-26T21:15:03.683 回答
4

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

if __FILE__ == $0
    <some code>
end

超过 5 行,我将其提取到main功能。这适用于 Python 和 Ruby 代码。没有这些代码,看起来结构很差。

于 2009-02-24T22:00:58.197 回答
-1

不。

为什么要增加一层额外的复杂性却没有真正的好处?Rubyists 没有使用它的约定。

我会等到您第二次需要使用它(这可能会比您想象的要少)然后重构它以使其可重用,这可能涉及像上面这样的构造。

于 2009-02-24T17:32:14.597 回答