Bug #11074
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
~~~ruby ~~~ def bar yield end x = 3 bar do |x=x| x end => nil bar do |y=x| x end => 3 ~~~ So perhaps `x=x` x=x isn't able to distinguish that the RHS should probably be the closure `x` x and, instead, is take to mean the value of the (new and uninitialized) `x` x parameter of the block. But then: ~~~ruby ~~~ def foo(x=x) x end foo(3) => 3 foo => NameError: undefined local variable or method `x' for main:Object ~~~ So at least in this case, it knows that `x` x on the RHS isn't the parameter variable `x`. x. This seems a bit inconsistent. One can get some really odd results as well: ~~~ruby ~~~ def foo(x) bar do |x=x| x end end foo(1) => 491 foo(1) => 498 foo(1) => 505 ~~~ In this case, `x=x` x=x doesn't render nil as in the previous case. The value of x being returned always increases by 7. Is doing something like `x=x` x=x as a parameter (to a block) generally viewed as being "undefined" behaviour? Thanks, Charlton