people = [
{
"first_name" => "Robert",
"last_name" => "Garcia",
"hobbies" => ["basketball", "chess", "phone tag"]
},
{
"first_name" => "Molly",
"last_name" => "Barker",
"hobbies" => ["programming", "reading", "jogging"]
},
{
"first_name" => "Kelly",
"last_name" => "Miller",
"hobbies" => ["cricket", "baking", "stamp collecting"]
}
]
index = 0
while index < "hobbies".length
p people[index]["hobbies"]
index = 1
end
with the class I'm taking they want me to use the p statement not puts and it wants me to run it as a loop I don't understand what the "undefined method '[]'" is can anyone shine some light on this and walk me through it as simply as possible? Any help is greatly appreciated
CodePudding user response:
You are attempting to iterate through people
based on the length of the string "hobbies"
. Now, that string has length 7, but the people
array only has length 3.
You either want:
index = 0
while index < people.length
p people[index]["hobbies"]
index = 1
end
Or better is to just used the each
method.
people.each do |person|
p person["hobbies"]
end
When I run this, I see:
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"]
The reason you get the error you do can be shown with a very simple example:
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
When we access an array at an index that's out of bounds, we don't get an error. We just get nil
. In your code, you try to subscript nil
and that does cause the error you're seeing.