@Konboi memo

主に技術に関してつらつらと。

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 ってのが提供されてるらしい。

attr_accessor default values

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 (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)