LoginSignup
6

More than 1 year has passed since last update.

Ruby 3.1 で { a: a } が { a: } とかけるようになったらしい

Last updated at Posted at 2021-09-11

ブログ記事からの転載です。

以前から山のように提案があった Hash のショートハンドが RubyKaigi の感想戦で matz を説得して入ったらしい。

これによって Ruby 3.1 で Hash が以下のように書くことができます。

name = "homu"
age = 14

# { name: name, age: age } のシンタックスシュガー
{ name:, age: }
# => {:name=>"homu", :age=>14}

# 一部だけ値を割り当てることもできる
{ name:, age: 16 }
# => {:name=>"homu", :age=>16}


def tokyo
  "東京"
end

# メソッド呼び出しも可能
{ tokyo: }
# => {:tokyo=>"東京"}


def user(name:, age:)
  { name:, age: }
end

# user(name: name, age: age) になる
user(name:, age:)

めっちゃ便利ですね!!!!
このショートハンドは { a: } -> { a: a } になるというよりかは a: -> a: a になる、と認識するとよさそうです(なので [a:] -> [a: a] となる。

matz を説得している時にちょうど離席していたのでどのような経緯で matz を説得したのかがすごく気になる…。

既に本体にコミットされているので rbenv install 3.1.0-dev などで最新の Ruby を落としてくるとすぐに使えます。
今すぐ早く使いたい。

おまけ

感想戦で binding.local_variable_get(:if) の変わりに {if:}[:if] が使えるようになると言及されててワロタ

def foo(if:)
  # if はキーワードなので変数にアクセスする時は Binding#local_variable_get を使う必要があった
  if_ = binding.local_variable_get(:if)

  # このショートハンドを使うとこうかけるようになる
  if_ = {if:}[:if]
end

便利そう。

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
6