Just do IT

思うは招く

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 とは、「非推奨である」ということ。 以下の記事で解説されていた。

qiita.com

このような警告が出る理由は、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"