我有这段代码:
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 :(得分: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
,则代码将失败(即使存在具有相同名称的本地var)。