0
class Test

    options = Trollop::options do
        opt :mode, "Select script mode", :default => 0
        opt :net, "Internal IP range", :type => :string
    end

@options = options

    def test
        pp @options
    end
end

を呼び出すとが@options戻るのはなぜですか?niltest()

@optionsまた、Trollop が最初に呼び出されたときにインスタンスに設定しようとしました。Trollop から返されたオプション ハッシュをクラス内のさまざまなメソッドに渡すことができる必要があります。

4

4 に答える 4

1

オプション ストレージにクラス インスタンス変数を使用する場合は、次のようにします。

class Test
   @options = Trollop::options ...

   class << self
     attr_accessor :options
   end

   def test
     pp Test.options
     # or self.class.options
   end
 end

 # And this will work too..
 pp Test.options

@@optionsそれ以外の場合は、代わりに他の人が指摘したように、クラス変数または定数を使用することをお勧めします。

于 2013-01-29T20:47:05.010 に答える
0

ここにあるのはスコープの問題です。@optionsin class context は、クラスのインスタンス変数です。では、現在のインスタンスtestのインスタンス変数@optionsにアクセスします。OPTIONS字句スコープを持つ定数、別名 を試してください。他の誰かがこれに対するよりクリーンな解決策を知っているかもしれません。

于 2013-01-29T20:34:44.027 に答える
0

Tass指摘するように、に変更@optionsするのOPTIONSも 1 つの方法です。

@@options;いずれかのコンテキストでクラス変数として使用することもできます。

于 2013-01-29T20:43:38.713 に答える