people = [\n {\n "first_name" => "Robert",\n "last_name" => "Garcia", \n "hobbies" => ["basketball", "chess", "phone tag"]\n },\n {\n "first_name" => "Molly",\n "last_name" => "Barker",\n "hobbies" => ["programming", "reading", "jogging"]\n },\n {\n "first_name" => "Kelly",\n "last_name" => "Miller",\n "hobbies" => ["cricket", "baking", "stamp collecting"]\n }\n]\n\nindex = 0\nwhile index < "hobbies".length\n p people[index]["hobbies"]\n index += 1\nend\nRun Code Online (Sandbox Code Playgroud)\n\xee\xba\xa7
\n在我参加的课程中,他们希望我不使用该p语句puts,并且希望我将其作为循环运行,我不明白“未定义的方法'[]'”是什么,任何人都可以对此进行一些说明并步行让我尽可能简单地完成它?
people您正在尝试根据字符串的长度进行迭代"hobbies"。现在,该字符串的长度为 7,但people数组的长度仅为 3。
您要么想要:
index = 0
while index < people.length
p people[index]["hobbies"]
index += 1
end
Run Code Online (Sandbox Code Playgroud)
或者更好的是只使用该each方法。
people.each do |person|
p person["hobbies"]
end
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我看到:
irb(main):028:0> people.each do |person|
irb(main):029:1* p person["hobbies"]
irb(main):030:1> end
["basketball", "chess", "phone tag"]
["programming", "reading", "jogging"]
["cricket", "baking", "stamp collecting"]
Run Code Online (Sandbox Code Playgroud)
您收到错误的原因可以通过一个非常简单的示例来显示:
irb(main):001:0> a = [2]
=> [2]
irb(main):002:0> a.length
=> 1
irb(main):003:0> a[0]
=> 2
irb(main):004:0> a[1]
=> nil
Run Code Online (Sandbox Code Playgroud)
当我们访问越界索引处的数组时,我们不会收到错误。我们刚刚得到nil。在您的代码中,您尝试使用下标nil,这确实会导致您看到的错误。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |