中規模の (非 OO の) perl プログラムを移植して Ruby を取り上げようとしています。私の個人的なイディオムの 1 つは、次のようにオプションを設定することです。
use Getopt::Std;
our $opt_v; # be verbose
getopts('v');
# and later ...
$opt_v && print "something interesting\n";
perl では、ちょっと歯を食いしばって $opt_v を (事実上) グローバルにします。
ルビーでは、多かれ少なかれ正確に同等です
require 'optparse'
opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") {
|$opt_verbose|
}
opts.parse!
end
$opt_verbose は、クラスがアクセスできるグローバルです。クラスにそのようなグローバルフラグについて知ってもらうことは...ええと...間違っているようです。これを行うOO慣用的な方法は何ですか?
- すべてのオプション関連の処理はメイン ルーチンに任せ、クラスは処理方法を決定するものだけをメイン ルーチンに返すようにしますか?
- クラスにオプションの動作を実装させ (たとえば、冗長にする方法を知っている)、attr_writer のようなものを介してモードを設定しますか?
更新: optparseを示唆する回答をありがとう、しかし、私が求めているのはコマンドラインオプションを処理する方法ではなく、グローバルプログラムの状態を効果的に設定するコマンドラインオプションとクラスの関係であることをより明確にする必要がありました理想的には、そのようなものから独立している必要があります。