Ruby 2.7 になって出る警告「Using the last argument as keyword parameters is deprecated」の意味
Ruby 2.7.0 になって以下のような警告メッセージを見る機会が増えた。
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
deprecated とは、「非推奨である」ということ。 以下の記事で解説されていた。
このような警告が出る理由は、Ruby 2.6系から2.7へのアップデートでの仕様変更によるもの。 具体的には、キーワード引数の代わりにハッシュを渡すと警告が出るようになった。
たとえば、こんなコードがあるとする。
def buy_burger(menu, drink: true, potato: true) p "menu: #{menu}" if drink p "drink" end if potato p "potato too" end end # ハッシュを用意 params = { drink: true, potato: true} # キーワード引数にハッシュを渡してみると buy_burger('cheese', params)
メソッドを実行すると、ちゃんと動くのだが、こんな警告が出る。
warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call warning: The called method `buy_burger' is defined here # ちゃんと実行される "menu: cheese" "drink" "potato too"
解決策としては、ハッシュオブジェクトの前に**
をつける。
buy_burger('cheese', **params)
すると警告が出ずに実行される。
"menu: cheese" "drink" "potato too"