Could someone help me understand what is happening here?
irb(main):001:0> a
NameError: undefined local variable or method `a' for main:Object
from (irb):1
irb(main):002:0> b
NameError: undefined local variable or method `b' for main:Object
from (irb):2
irb(main):003:0> c
NameError: undefined local variable or method `c' for main:Object
from (irb):3
irb(main):004:0> b = c
NameError: undefined local variable or method `c' for main:Object
from (irb):4
irb(main):005:0> a = a
=> nil
a is undefined, so why does "a = a" work instead of giving a NameError
like "b = c" does?
Also:
irb(main):006:0> b = c
NameError: undefined local variable or method `c' for main:Object
from (irb):6
irb(main):007:0> b
=> nil
Why did b get initialized to nil if there was a NameError?
Source:
https://www.destroyallsoftware.com/talks/wat
Thanks!
Navin.
···
from :0
from :0
--
Posted via http://www.ruby-forum.com/.
"Local variables are created immediately when the Ruby parser parses a
left-hand-side local variable. Before the right-hand-side is even
parsed, the local variable has been created. This also results in an
infamous anomaly:
def say_what?
x = 'hello' unless defined?(x)
puts x
end
say_what? prints a blank line! This is because as soon as the x on the
LHS is parsed, x is a local variable with value nil. By the time
defined?(x) is executed, x has long since been a local variable!"
···
On Fri, Jan 27, 2012 at 6:40 PM, Navindra Umanee <navindra@cs.mcgill.ca> wrote:
Could someone help me understand what is happening here?
irb(main):005:0> a = a
=> nil
a is undefined, so why does "a = a" work instead of giving a NameError
like "b = c" does?
Thanks for that.
I was hoping it was for a cool reason or that it enabled some cool
usage, but seems like it's more of an implementation consequence than
any intentional effect.
···
--
Posted via http://www.ruby-forum.com/.
It enables
a ||= whatever
a &&= whatever
Which I think is "cool", but at the very least, is incredibly useful (the
former more than the latter).
Anyway, in case anyone hasn't seen it, this comes from
https://www.destroyallsoftware.com/talks/wat
···
On Fri, Jan 27, 2012 at 6:56 PM, Navindra Umanee <navindra@cs.mcgill.ca>wrote:
Thanks for that.
I was hoping it was for a cool reason or that it enabled some cool
usage, but seems like it's more of an implementation consequence than
any intentional effect.
--
Posted via http://www.ruby-forum.com/\.