Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Rubyのクラスを作る際に可変長の変数をもたせたい場合

久々にRubyのお話です。
クラスを作る際に可変長の変数をもたせたい場合は、空Hashのデフォ値を持った引数を設定しておきます。
こうすれば、Hashを渡してあげれば内容を参照できますし、駄目な値なら弾く事ができます。

実際のところ

デバッグ情報なんかを付加したいときには使えますね。

class Sample
  attr_accessor :val
  attr_reader :flag
  def initialize(val, params = {})
    @val = val
    if params[:flag]
      @flag = true
    end
  end
end

a = Sample.new(42)
b = Sample.new(12, {flag: true})
p a.flag
#=> nil
p b.flag
#=> true

Hash以外の値を渡せばエラーで止まります。

c = Sample.new(42, 11)
#2> class.rb:6:in `[]': no implicit conversion of Symbol into Integer (TypeError)

参考もと

stackoverflow.com