2013-05-21 77 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,则代码将失败(即使存在具有相同名称的本地变量)。