【发布时间】:2014-08-25 00:01:09
【问题描述】:
我是 ruby 新手,我试图迭代一个二维数组。我在我的代码中犯了一个错误。从那个错误中,我注意到了一些意想不到的输出。
s = [["ham", "swiss"], ["turkey", "cheddar"], ["roast beef", "gruyere"]]
i = 0;
s.each{
|array| so = array[i] # pin
puts so[i]
}
由于#pin,如果i = 0,则输出为h t r。 i = 1 给出 w hr。 i > 1 给出错误:
C:/Ruby.rb in `block in <main>': undefined method `[]' for nil:NilClass (NoMethodError)
from C:/Ruby.rb:3:in `each'
from C:/Ruby.rb:3:in `<main>'
如果我使用|array| so = array # pin,那么我的代码不会产生奇怪的输出。我将修复剩余的内容,以使我的代码迭代 'i' 可以具有的所有值。
请解释一下。
PS:工作代码在这里
s = [["ham", "swiss"], ["turkey", "cheddar"], ["roast beef", "gruyere"]]
s.each{
|array| so = array
array.each{
|str| puts str
}
}
【问题讨论】:
-
您看到的是获取超出范围的数组值的结果。使用 array.fetch(i) 你会得到一个更有帮助的错误。我通常使用 fetch 进行数组和哈希查找,这样你就不会感到奇怪 x 在 nil:NilClass 上被调用了
-
@Joeyjoejoejr - 谢谢。但是作为一个初学者,我很困惑为什么 ruby 会这样。
-
这里的人怎么这么讨厌? -1 是什么原因,原因在哪里?如果您认为某个问题质量很差并且必须删除,那么我很乐意遵守。但是,我首先需要一个理由。
标签: ruby arrays multidimensional-array