Rubyでデフォルト引数が複数の場合のちょっとしたTips

More than 3 years have passed since last update.


概要

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周りなど、

いろいろな引数が想定される場合には、使えるかと思います。