Hi,
Could someone please help me to understand the difference of:
html = Hpricot( “
” )
(html/’/div’).each do |item|
x = (item/’/div’)[0].to_html
p x
end
output: “
”
and
html = Hpricot( “
” )
(html/’/div’).each do |item|
p (item/’/div’)[0].to_html
end
gives “undefined method `[]’ for nil:NilClass (NoMethodError)” in line
3
Shouldn’t the code snippets semantically be the same?
Thanks,
Andreas
On Nov 17, 8:06 am, ridcully [email protected] wrote:
output: “
”
and
html = Hpricot( “
” )
(html/‘/div’).each do |item|
p (item/‘/div’)[0].to_html
end
gives “undefined method `[]’ for nil:NilClass (NoMethodError)” in line
3
Try your second example in irb and you’ll get a warning (or I do,
anyway):
(irb):5: warning: don’t put space before argument parentheses
This means you’re essentially doing this:
(p(item/‘/div’))[0].to_html
and since p returns nil, you’re calling [] on nil. Try this instead:
p((item/‘/div’)[0].to_html)
On Nov 17, 5:16 pm, yermej [email protected] wrote:
and since p returns nil, you’re calling [] on nil. Try this instead:
p((item/‘/div’)[0].to_html)
You’re right, it does work if I add parentheses.
Still I don’t fully understand why this is happening. The [] operator
obviously has a high presendence, because this of course does work:
p [1, 2, 3][0].to_s
Also this does work fine:
p (html/‘/div’)[0].to_html
I don’t really see the difference to my second example. What am I
missing here?
Andreas