Rubyでは、引数にアスタリスク2つ**
をつけると、ハッシュに格納できる。
これは見たほうがわかりやすい。
def hello_with_options(msg, **opts) name = opts[:name] name2 = opts[:name2] time = opts[:time] || Time.now puts "#{msg} #{name} and #{name2} @ #{time}" end hello_with_options("Hello!", name: "Ruby", name2: "PHP") => Hello! Ruby and PHP @ 2019-12-13 09:29:00 +0900
**opts
このように引数をもたせると、この場合はopts
というハッシュが生成される。そしてメソッドの中でキーを持たせて使うことができる。
name = opts[:name]
この場合、optsというハッシュの:name
というシンボルのキーの値を、name
に代入している。
p opts => {:name=>"Ruby", :name2=>"PHP"}
では、:name
の値がなぜ”Ruby”になるのかというと、メソッドを使うときに引数で指定しているためだ。
hello_with_options("Hello!", name: "Ruby", name2: "PHP")
具体的にはここ。
name: "Ruby"
また、ハッシュなので複数のデータを格納できるため、name2: "PHP"
と入れてみた。
name2: "PHP"
@以降に出力した時間も代入しているため、こんな感じに表示される。
Hello! Ruby and PHP @ 2019-12-13 09:29:00 +0900