読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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