2012-01-21 37 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 

我的問題是,實例方法start中的局部變量options應該是@options?在我的選擇中,由於前兩個摘錄顯示作爲參數傳遞給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