【问题标题】:How can I change this from a local to instance variable?如何将其从本地变量更改为实例变量?
【发布时间】:2013-05-16 16:34:30
【问题描述】:

我有这段代码:

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)

什么是等价物?

【问题讨论】:

标签: ruby-on-rails ruby variables


【解决方案1】:
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,你的代码会失败(即使有同名的本地变量)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2016-12-19
    • 2019-12-09
    • 2017-09-10
    • 1970-01-01
    • 2018-10-01
    • 2012-11-02
    相关资源
    最近更新 更多