2012-01-21 12 views
1
次の3つのコードの抜粋に関連

私の質問:ラックのソースコード内の変数の型について混乱

クラスメソッドのコード:インスタンスメソッドのstart(options = nil)

# File 'lib/rack/server.rb', line 136 

def self.start(options = nil) 
    new(options).start 
end 

コード:#initialize(options = nil)

# File 'lib/rack/server.rb', line 174 
def initialize(options = nil) 
    @options = options 
    @app = options[:app] if options && options[:app] 
end 

インスタンスコードのコード:#start

# File 'lib/rack/server.rb', line 229 
def start 
    if options[:warn] 
    $-w = true 
    end 

    ...# more lines that are not related to my question 
end 

私の質問は、インスタンスメソッドのローカル変数options@optionsであるべきですか?私の選択肢では、最初の2つの抜粋は、initializeに渡すパラメータとしてのオプションを示し、それをインスタンス変数@optionsにするので、インスタンスメソッドの開始では、optionsの代わりに@optionsとして参照する必要があります。 optionsのオプションのためのゲッターメソッドがあり、同じクラスで#start

答えて

5

によってアクセスすることができない。

# File 'lib/rack/server.rb', line 180 
def options 
    @options ||= parse_options(ARGV) 
end 

options#startこのメソッドへの呼び出しではなく、ローカル変数です。

+0

私の質問に答えてくれてありがとう、私はそれを理解することがとても満足です! – mko

関連する問題