LoginSignup
28
26

More than 5 years have passed since last update.

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

Posted at

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

どうなるのでしょうかね

28
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
26