classのinitializeの引数でハッシュを渡したい時はどうするのがベストなんだろう?
hoge1 = Hoge.new puts hoge1.hoge puts hoge1.foo hoge2 = Hoge.new({hoge: 'hoge2'}) puts hoge2.hoge puts hoge2.foo hoge3 = Hoge.new({foo: 'foo2'}) puts hoge3.hoge puts hoge3.foo hoge3 = Hoge.new({hoge: 'hoge2',foo: 'foo2'}) puts hoge3.hoge puts hoge3.foo
こんな感じで、ときにはパラメータを渡したり、ときにはパラメータを渡さなかったりっていう 場面はよくあると思う。
Rubyでこういう場合ってどうやるんだろう??
とりあえずは
Inputting a hash with default values
を読んでこんな風にしてみたけど...
引数が多くなったら面倒になりそうだけど、どうなんだろう?
railsではattr_accesor_with_default
ってのが提供されてるらしい。
class Hoge attr_accessor :hoge, :foo def initialize(args = {}) args = {hoge: 'hoge', foo: 'foo'}.merge(args) @hoge = args[:hoge] @foo = args[:foo] end end
先頭の実行結果
# 実行結果 hoge foo hoge2 foo hoge foo2 hoge2 foo2
まとめ
知っている方いればご教授お願いしますm(_ _)m
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (14件) を見る