Posted at

ruby2.2.0ではメソッドの引数のデフォルト値に同じ名前の変数を使えない

More than 3 years have passed since last update.

ruby2.2.0からの挙動みたいですが,

メソッドの引数のデフォルト値に同じ名前の変数を使おうとするとcircular argument referenceというwaringが出ます。


2.2.0


[3] pry(main)> class Foo
[3] pry(main)* def foo; "abc" end
[3] pry(main)*
[3] pry(main)* def run(foo = foo)
[3] pry(main)* p foo
[3] pry(main)* end
[3] pry(main)* end
(pry):4: warning: circular argument reference - foo
=> :run

[3] pry(main)> foo = 2
=> 2
[4] pry(main)> def hoge(foo=foo)
[4] pry(main)* puts foo
[4] pry(main)* end
(pry):2: warning: circular argument reference - foo


2.1.2だと出ない模様


2.1.2

[6] pry(main)> class Foo

[6] pry(main)* def foo; "abc" end
[6] pry(main)* def run(foo=foo)
[6] pry(main)* puts foo
[6] pry(main)* end
[6] pry(main)* end
=> :run
[7] pry(main)> Foo.new.run
abc
=> nil

というのもchefで下記エラー

warning: circular argument reference - data_bag in chef/data_bag_item.rb:161

https://github.com/chef/chef/issues/2923

があって、

問題の部分のコードが


data_bag_item.rb

def destroy(data_bag=data_bag, databag_item=name)

chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
end

だったから。

rubyでもイシューであがっているみたい

そんな仕様変更されても困るって発起人は言っているけど、

リプライでは That would be tautologically nil.なのだから

こっちのほうが正しんじゃね?って反論している。

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

どうなるのでしょうかね