更清晰的方法来定义没有lambda的方法

Dmy*_*iak 0 ruby closures metaprogramming ruby-on-rails

是否有更简单和/或更易读的方法在Ruby中创建闭包,以便定义的方法可以访问变量 m

我在lambda这里有一个轻微的"问题" .

我经常动态定义必须访问局部变量的方法:

例如:

class Comparison

  def income
    123
  end

  def sales
    42342
  end

  # and a dozen of other methods

  # Generate xxx_after_tax for each method
  instance_methods(false).each do |m|
    lambda {
      define_method("#{m}_after_tax") do
        send(m) * 0.9
      end
    }.call
  end
end
Run Code Online (Sandbox Code Playgroud)

Yur*_*hov 5

class Comparison

  def income
    123
  end

  def sales
    42342
  end

  # and a dozen of other methods

  # Generate xxx_after_tax for each method
  instance_methods(false).each do |m|

    define_method("#{m}_after_tax") do
      send(m) * 0.9
    end

  end
end
Run Code Online (Sandbox Code Playgroud)