代码之家  ›  专栏  ›  技术社区  ›  MiniQuark

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

  •  47
  • MiniQuark  · 技术社区  · 17 年前

    在python中,模块不需要 具有主要功能,但通常使用以下习惯用法:

    def my_main_function():
        ... # some code
    
    if __name__=="__main__":  # program's entry point
        my_main_function()
    

    我知道鲁比没有 有一个 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 回复  |  直到 17 年前
        1
  •  77
  •   Allyn    17 年前

    我通常使用

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

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

        2
  •  51
  •   Benjamin Oakes Benjamin Oakes    17 年前

    $PROGRAM_NAME 比使用更具可读性 $0

    
    if __FILE__ == $PROGRAM_NAME
      # Put "main" code here
    end
    
        3
  •  9
  •   Rein Henrichs    15 年前

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

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

    require 'application'
    Application.run(ARGV)
    
        4
  •  4
  •   Alexander Lebedev    17 年前

    我个人的经验法则是:时刻

    if __FILE__ == $0
        <some code>
    end
    

    main 作用这对Python和Ruby代码都适用。没有这些代码,代码的结构看起来很糟糕。

        5
  •  -1
  •   Ian Terrell    17 年前

    为什么要增加一层额外的复杂性而没有真正的好处?红宝石爱好者没有使用它的惯例。

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

    推荐文章