Project

General

Profile

Actions

Bug #10777

closed

variable gets reset when passing a named argument to a function, if the name of this argument is the same as variable name

Added by ofayans (Oleg Fayans) over 9 years ago. Updated over 9 years ago.

Status:
Rejected
Target version:
-
ruby -v:
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
[ruby-core:67770]

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.

Actions

Also available in: Atom PDF

Like0
Like0