2008-09-02 9 views
4

私は中規模(非OO)のperlプログラムを移植してrubyを手に入れようとしています。私の個人的なイディオムの一つは、このようなオプションを設定するには、次のとおりです。コマンドラインオプションを使用するためのrubyイディオム

use Getopt::Std; 
our $opt_v; # be verbose 
getopts('v'); 
# and later ... 
$opt_v && print "something interesting\n"; 

Perlでは、私は一種の私の歯をグリットとグローバル(効果)ことopt_v $をしましょう。 Rubyで

、多かれ少なかれ、完全に同等では、$ opt_verboseはクラスがアクセスできるようグローバルで

require 'optparse' 
    opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") { 
     |$opt_verbose| 
    } 
    opts.parse! 
end 

だろう。クラスがグローバルフラグについて知っているように見えますが... ...間違っています。これを行うOO-idiomaticな方法は何ですか?

  • メインルーチンはすべてのオプション関連のものを処理し、クラスで処理する方法を決定するだけでクラスを返すようにします。
  • クラスにオプションの動作(例:冗長表示の方法など)を実装し、attr_writerなどのモードを設定するようにしましたか?

更新:optparseのを示唆答えをおかげで、私は、コマンドラインオプションとの関係、それは私が求めているコマンドラインオプションを処理する方法をないことを明確に、より多くされている必要があります理想的にはそのようなことから独立していなければならないグローバルなプログラムの状態とクラスを効果的に設定します。

答えて

3

それを使用する方法を示しているようだです私はthis blog post(Todd Werthによる)を走り、Rubyのコマンドラインスクリプトのかなり長いスケルトンを示しました。彼のスケルトンは、アプリケーションコードがインスタンス化されたアプリケーションクラスにカプセル化され、アプリケーションオブジェクト上で「実行」メソッドを呼び出すことによって実行されるハイブリッドアプローチを使用します。これにより、クラス全体のインスタンス変数にオプションを格納できるようになり、アプリケーションオブジェクト内のすべてのメソッドは、スクリプトで使用される可能性のある他のオブジェクトに公開されることなくアクセスできます。

オプションが1つのオブジェクトに含まれていて、メソッド呼び出しでattr_writersまたはoptionパラメータを使用して、関連するオプションを追加のオブジェクトに渡す方法を使用します。このようにして、外部クラスに含まれるコードをオプション自体から分離することができます。thingy.verbose=true attr_writerまたはthingy.process(true)コールでオプションが設定されている場合は、thingyクラス内のメインルーチン内の変数の命名を心配する必要はありません。

+1

です。注:ToddのURL構造はわずかに変更されているように見えますが、現在は存続しています[ここ](http://blog.toddwerth.com/entries/5)。 – lindes

1

processing command line options in ruby」のgoogleのfirst hitは、Trollopについての記事です。この記事はこの仕事に適したツールです。

+0

私はそれがどのように誤っているのか分かりません。彼らは誰にも名前を呼んでおらず、誰の乱交などについても何の判断もしていません。 – John

+0

単語の定義の1つは、「性的に評判が悪い、「この言葉は、定義上、女性の性別だけでなく、私の心に嫌われているということは、嫌悪感を示していることを覚えておいてください。女性にしか適用できない嫌がらせの形態 – lindes

+0

注:私はソフトウェア自体について全く何の判断もしていませんが、私はそうするためには十分に注意を払っていません。その名前にコメントしてください。 – lindes

2

optparseライブラリは標準ディストリビューションの一部ですので、サードパーティのものを必要とせずに使用することができます。

私は個人的にそれを使用していないが、私は推測rails seems to use it extensivelyso does rspecは、信頼

This example from rails' script/consoleのかなり固体投票はしばらく前にかなり簡単かつきれいに

+0

' script/console'、新しいリンクはhttps://github.com/rails/rails/blob/master/railties/lib/rails/commands/console.rb – Steen

関連する問題