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.なのだから
こっちのほうが正しんじゃね?って反論している。
どうなるのでしょうかね