50

Python では、モジュールに main 関数を含める必要はありません、次のイディオムを使用するのが一般的です。

def my_main_function():
    ... # some code

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

Ruby がメソッドを持つ必要ないことはわかっていmainますが、従うべきベスト プラクティスはありますか? メソッドなどに名前を付ける必要があり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のための規則はありません。

2回目に使用する必要があるまで待ってから(おそらくあなたが思っているよりも頻繁に発生しないでしょう)、再利用できるようにリファクタリングします。これには、おそらく上記のような構成が含まれます。

于 2009-02-24T17:32:14.597 に答える