けんぼうは留年生

ノンジャンルで何か書きたくなった時に書く感じ

Rubyでメソッドの引数の変数名をそのまま同名のインスタンス変数に代入したい

インスタンスを生成する時に引数が多くなることはぼちぼちあると思う。
んで、その引数を受け取るローカル変数の名前と代入したいインスタンス変数の名前が同じなこともよくあることだと思う。
でも、それをこんな風に書くのは何とも面倒。

class Hoge
  def hogehoge(var1, var2, var3, ……)
    @var1 = var1
    @var2 = var2h
    @var3 = var3
    ……
  end
end

こんなの書きたくないけど書かなければ代入できない。

てなわけでやりたいことを自動化してRuby自身にやってもらうことにした。

class Hoge
  def hogehoge(var1, var2, var3, ……)
    self.method(__method__).parameters.each do |arg_type, arg_name|
      instance_eval "@#{arg_name} = #{arg_name}"
    end
  end
end

これで解決した……のかな?

[追記]
RubyistたちのDRY症候群との戦い
これに書いてあるのも似たようなことをしている……のかな?