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

けんぼーは留年生

Twitterに書ききれないこととか

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

Ruby 2.0.0

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

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症候群との戦い
これに書いてあるのも似たようなことをしている……のかな?