【问题标题】:Ruby instance_variable_set error inside of iterator: `market_0_home' is not allowed as an instance variable name迭代器内的 Ruby instance_variable_set 错误:“market_0_home”不允许作为实例变量名
【发布时间】:2012-07-10 00:17:23
【问题描述】:

首先,这是@market_0_home 在下面迭代之外的分配,只是为了向您展示我尝试过

>> @market_0_home = 3
=> 3

好的,没有错误,现在让我们在一个有点复杂的迭代中尝试一下

>> markets
=> [{"home"=>"CO", "name"=>"David Douglas"}, {"home"=>"SC", "name"=>"David Robertson"}]
>> markets.each_with_index do |market, i|
?> market.each do |name, v|
?> instance_variable_set "market_#{i}_#{name}", v
>> end
>> end
NameError: `market_0_home' is not allowed as an instance variable name
from (irb):23:in `instance_variable_set'
from (irb):23
from (irb):22:in `each'
from (irb):22
from (irb):25:in `each_with_index'
from (irb):21:in `each'
from (irb):21:in `each_with_index'
from (irb):21
>> 

【问题讨论】:

  • 好的,这至少有两个错误,包括提到的主要错误。
  • 是的,我比我最初意识到的更困惑。

标签: ruby iterator block variable-assignment each


【解决方案1】:

我在变量名中添加了@,下面是instance_variable_set

@market_0_home = 3
markets = [{"home"=>"CO", "name"=>"David Douglas"}, {"home"=>"SC", "name"=>"David Robertson"}]
markets.each_with_index do |market, i|
  market.each do |name, v|
    instance_variable_set "@market_#{i}_#{name}", v
  end
end

当我运行它时,它运行良好。

=> 3
>> markets = [{"home"=>"CO", "name"=>"David Douglas"}, {"home"=>"SC", "name"=>"David Robertson"}]
=> [{"home"=>"CO", "name"=>"David Douglas"}, {"home"=>"SC", "name"=>"David Robertson"}]
>> markets.each_with_index do |market, i|
?>       market.each do |name, v|
?>           instance_variable_set "@market_#{i}_#{name}", v
>>       end
>>   end
=> [{"home"=>"CO", "name"=>"David Douglas"}, {"home"=>"SC", "name"=>"David Robertson"}]
>> @market_0_home
=> "CO"
>> @market_1_home
=> "SC"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2013-05-02
    • 2021-07-29
    • 2018-07-18
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多