[ruby-list:50864] Re: v2.7でのキーワード引数について
From:
大田黒 俊夫 <toshio.otaguro@...>
Date:
2019-12-29 09:39:27 UTC
List:
ruby-list #50864
皆様, 年末のお忙しい時期にもかかわらず,迅速にご回答いただき,深謝いたします. 当面は,なかださんと遠藤さんの回避策を使わせていただきます. ありがとうございました. 俊(とし) 2019年12月29日(日) 16:42 Yusuke Endoh <mame@ruby-lang.org>: > 遠藤といいます。 > > これはバグですね。必要ない警告でした。 > Structのinitializeをオーバーライドしてキーワード引数を受け取るようにする、 > というのが想定できてなかったです。 > 手元で修正は作れたので、たぶん2.7.1で直ります。 > > さしあたっての対応としては、keyword_init を使うことで回避できなくはないです。 > > Sample2 = Struct.new(:s1, :s2, :s3, keyword_init: true) do > def initialize(a1:, a2:) > super(s1: a1, s2: a2, s3: a1 + a2) > end > end > p Sample2.new(a1:1, a2:2) > > ご迷惑をおかけします。 > > 2019年12月29日(日) 16:00 大田黒 俊夫 <toshio.otaguro@gmail.com>: > >> Ubuntu の snap でインストールした Ruby を使っていますが,本日自動的に v2.7 にアップデートされました.バージョン表記では >> ruby 2.7.0dev (2019-12-25 master e1e1d92277) [x86_64-linux] >> と表示されて,微妙にリリース版ではないように見えるのが気になります. >> >> さて,キーワード引数に関する警告が出るようになりました.リリースノートにいろいろ書いてあるのを読んでもよく理解できなかったので,ここで質問します. >> >> Sample1 = Struct.new(:s1, :s2, :s3) do >> def initialize(a1, a2) >> super(a1, a2, a1 + a2) >> end >> end >> p Sample1.new(1, 2) >> >> Sample2 = Struct.new(:s1, :s2, :s3) do >> def initialize(a1:, a2:) >> super(a1, a2, a1 + a2) >> end >> end >> p Sample2.new(a1:1, a2:2) >> >> 上記のスクリプトを v2.7 で実行すると, >> >> #<struct Sample1 s1=1, s2=2, s3=3> >> kwarg_01.rb:13: warning: Using the last argument as keyword parameters is >> deprecated; maybe ** should be added to the call >> kwarg_01.rb:9: warning: The called method `initialize' is defined here >> #<struct Sample2 s1=1, s2=2, s3=3> >> >> という警告が出て,Sample2 のキーワード引数が非推奨と言われてしまいます.構造体には正しく代入されているようです. >> >> 私はキーワード引数を多用していますが,最後の引数に使わないほうが良い理由は何でしょうか?最も簡単な回避策はどのようなものでしょうか?どなたかご教示いただければ幸いです. >> >> 俊(とし) >> > -- 俊(とし) * 望湖庵日記 http://griffin.cocolog-nifty.com/lakesidedairy/