From: eregontp@... Date: 2015-01-23T20:17:06+00:00 Subject: [ruby-core:67771] [ruby-trunk - Bug #10777] [Rejected] variable gets reset when passing a named argument to a function, if the name of this argument is the same as variable name Issue #10777 has been updated by Benoit Daloze. 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. ---------------------------------------- Bug #10777: variable gets reset when passing a named argument to a function, if the name of this argument is the same as variable name https://bugs.ruby-lang.org/issues/10777#change-51194 * Author: Oleg Fayans * Status: Rejected * Priority: Normal * Assignee: Yukihiro Matsumoto * ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 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 -- https://bugs.ruby-lang.org/