Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RubyWart: Missing Name Errors (AGAIN!)

14 views
Skip to first unread message

rantingri...@gmail.com

unread,
May 1, 2013, 1:15:25 AM5/1/13
to
Same bowel movement, different cess pool!

Can someone please explain the logic of having undefined symbols default to random values instead of throwing a NameError? Because this is making me F'ING NUTS PEOPLE!!!!

============================================================
Code Sample
============================================================
class Foo
def foo
$stdout.write("@poo = #{@poo}\n")
end
end


============================================================
Interactive Session
============================================================
rb> f = Foo.new
#<Foo:0x79e6680>
rb> f.foo
@poo = 7

============================================================
Resulting Emotional State
============================================================
ಠ_ಠ

Robert Klemme

unread,
May 1, 2013, 5:27:49 AM5/1/13
to
On 05/01/2013 07:15 AM, rantingri...@gmail.com wrote:
> Same bowel movement, different cess pool!
>
> Can someone please explain the logic of having undefined symbols default to random values instead of throwing a NameError? Because this is making me F'ING NUTS PEOPLE!!!!

They don't. Also, this is not about an undefined Symbol but about an
unassigned member variable.

> ============================================================
> Code Sample
> ============================================================
> class Foo
> def foo
> $stdout.write("@poo = #{@poo}\n")
> end
> end
>
>
> ============================================================
> Interactive Session
> ============================================================
> rb> f = Foo.new
> #<Foo:0x79e6680>
> rb> f.foo
> @poo = 7

That output does not come from the code above:

irb(main):001:0> class Foo
irb(main):002:1> def foo
irb(main):003:2> $stdout.write("@poo = #{@poo}\n")
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> f = Foo.new
=> #<Foo:0x8f8bb84>
irb(main):007:0> f.foo
@poo =
=> 8

What you probably did:

irb(main):001:0> class Foo
irb(main):002:1> def foo
irb(main):003:2> $stdout.write("@poo = #{@poo}")
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> f = Foo.new
=> #<Foo:0x9285344>
irb(main):007:0> f.foo
@poo = => 7

Whatever interactive Ruby you used does not print "=> " in front of the
inspect of the last value. Now you also see why IRB does print this prefix.

> ============================================================
> Resulting Emotional State
> ============================================================
> ಠ_ಠ

It may actually be the other way round.

Kind regards

robert


0 new messages