Issue #13815 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Open to Rejected

opti (Andreas Opti) wrote:
> x=y=0 # outside defined vars!
> 3.times { x,y = x+1,y+1 } # as expected: x==3
> 3.times { p(x,y = x+1,y+1) } # NOT as expected: x not changed!
> # x,y are the same vars as above. p shoudn't have any effect on scope

This makes sense once you understand how ruby parses the p method call:

~~~ ruby
3.times { p((x),(y = x+1),(y+1)) } 
~~~

If you want the same behavior, you need to use parentheses:

~~~ ruby
3.times { p((x,y = x+1,y+1)) } 
~~~




----------------------------------------
Bug #13815: p changes scope of *vars
https://bugs.ruby-lang.org/issues/13815#change-66178

* Author: opti (Andreas Opti)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.4 and 2.5
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
x=y=0  # outside defined vars!
3.times {|i| x,y=x+1,y+1 }  # as expected: x==3
3.times {|i| p(x,y=x+1,y+1) }  # NOT as expected: x not changed!
  # x,y are the same vars as above. p shoudn't have any effect on scope






-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>