概要
Rubyのデフォルト引数は、かなり便利なものだか、
複数個デフォルト引数がある場合、どうしたらよいのかをまとめてみた。
結論
ハッシュを使って渡そう
def hoge(args = {})
args = {var1: "foo", var2: "fuga"}.merge(args)
end
内容
基本的なデフォルト引数
def hoge(var = "foo")
p "#{var}"
end
指定しない時はデフォルトの値を使い
hoge
=> "foo"
引数指定した場合は、その値を使う
hoge("fuga")
=> "fufa"
引数が複数ある場合
def hoge(var1 = "foo", var2 = "fuga")
p "#{var1}_#{var2}"
end
指定しない場合はこれでよいが…
hoge
=> "foo_fuga"
"foo_foo"
と出力したい(第2引数だけ変更したい)場合
hoge("foo", "foo")
=> "foo"
デフォルト引数の恩恵が受けられない
なのでハッシュで渡す
こうしておけば
def hoge(args = {})
args = {var1: "foo", var2: "fuga"}.merge(args)
p "#{args[:var1]}_#{args[:var2]}"
end
指定しない場合でも。
hoge
=> "foo_fuga"
変えたい引数だけをハッシュで渡せば、
全部を指定しなくても…
hoge({var2: "foo"})
=> "foo_foo"
hoge({var1: "fuga"})
=> "fuga_fuga"
デフォルト引数が使える!
まとめ
外部API周りなど、
いろいろな引数が想定される場合には、使えるかと思います。