如何将其从本地变量更改为实例变量?

时间:2013-05-21 19:28:43

标签: ruby-on-rails ruby variables

我有这段代码:

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)

等同于什么?

1 个答案:

答案 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)。