Bug #10777
closedvariable gets reset when passing a named argument to a function, if the name of this argument is the same as variable name
Description
I have a function, say function1 that has a variable, named param with a value of true.
from this function I call another function, function2 with the following call:
function2(param=false)
During this call the value of param in function1 gets changed to false, which absolutely should not happen.
Example code:
def func2(param=nil)
puts "param in func2 is #{param}"
end
def func1(param="Hello")
puts param
func2(param="Goodbye")
puts "param in func1 is #{param}"
end
func1
Hello
param in func2 is Goodbye
param in func1 is Goodbye
=> nil
The same in a pastebin:
http://pastebin.mozilla.org/8315338
This behavior is observed also in ruby-1.9.3-p545
Updated by Eregon (Benoit Daloze) over 9 years ago
- Status changed from Open to Rejected
This is not Python ;)
= is assignment, or in method declarations indicates the default value for an argument.
So func2(param="Goodbye")
is effectively the same as
param="Goodbye"
func2(param)
which makes the current behavior meaningful.
If you want keyword arguments, the syntax is
def func2(param: nil)
...
end
func2(param: "Goodbye")
And this will not affect the param local variable.