2013-05-21 115 views
-1

我的代碼塊:我如何從一個本地變量變爲實例變量?

if %w[ups fedex usps].include?(carrier.slug) 
    send(carrier.slug).track(number) 
end 

有效地複製:

ups.track(number) 
fedex.track(number) 
usps.track(number) 

但我現在需要的是,與實例變量:

@ups.track(number) 
@fedex.track(number) 
@usps.track(number) 

有什麼相同呢?

+0

http://stackoverflow.com/questions/1074729/get-the-value-of-an-instance-variable-given-its-name – Subhas

回答

4
if %w[ups fedex usps].include?(carrier.slug) 
    var_name = "@#{carrier.slug}" 
    instance_variable_get(var_name).track(number) 
end 

順便說一句,你的解釋是不正確的。

ups.track(number) 
fedex.track(number) 
usps.track(number) 

這些被視爲方法,而不是局部變量。如果沒有方法ups,則代碼將失敗(即使存在具有相同名稱的本地變量)。