-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)

什么是等价物?

4

1 回答 1

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)

这些被视为方法,而不是局部变量。如果没有 method ups,您的代码将失败(即使有同名的本地 var)。

于 2013-05-21T19:31:24.287 回答