Ruby のクラス初期化のときのパラメータを都合よく渡したい

ちょっとした ruby の自作クラスの時に、インスタンスの初期化で変数を渡したいとき、ActiveRecord っぽくやれるといろいろ手抜きができていいよね。

スニペット

ActiveRecord と ActiveSupport を参考に。

class Hoe
  def initialize(attributes = nil)
    attributes.each do |k, v|
      send("#{k.to_s}=", v) if respond_to?("#{k.to_s}=")
    end if attributes
    yield self if block_given?
  end
end

new で渡したいだけなのでいろいろ省いて最小限に。

使い方

プロパティを初期化時に渡すのが目的ですので、事前に attr_accessor などで必要なものを定義してください。

ハッシュを渡す

Hoe.new(name: 'わたし', job: '調停官')

ActiveRecord でモデルを new するときと同じです。

ブロックを渡す

Hoe.new do |h|
  h.name = 'わたし'
  h.job = '調停官'
end

こんな感じでも初期化できます。

ツッコミ大歓迎

シェアする

  • このエントリーをはてなブックマークに追加

フォローする