I understand why a = a in Ruby produces nil (see Why is a = a nil in Ruby?).
But using the rightwards assignment operator, a => a produces an error:
irb(main):001:0> a => a
(irb):1:in `<main>': undefined local variable or method `a' for main:Object (NameError)
But when the right hand side is not a complex pattern, I thought => should be exactly the same as =, just flipped.
So why does a => a not behave the same as a = a?
CodePudding user response:
From the pattern matching docs we know that:
<expression> in <pattern>is the same ascase <expression>; in <pattern>; true; else false; end.
so:
a in a
is actually a shorthand for:
case a
in a
true
else
false
end
In the above case expression it's probably obvious that you would get a NameError on the very first line.
I assume a => a behaves similarly to a in a in regards to evaluation order.
