【发布时间】:2012-05-30 08:50:13
【问题描述】:
是否有一种更简单和/或更易读的方法在 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
【问题讨论】:
-
您确定需要 lambda 吗?没有它,关闭应该可以正常工作。
-
他在这里不需要 lambda)) 这看起来很有趣,创建 lambda 并立即调用它。 Lambda 只是一个匿名函数。
-
是的。 Lambda 需要能够访问方法定义中的
m变量。 -
我不知道你用的是哪个 Ruby,但是 1.8.7 和 1.9.3 都不需要这个 lambda。
-
忽略它。它实际上可以在没有 lambda 的情况下工作。现在不记得我何时以及为什么开始将其包装在 lambdas 中。
标签: ruby-on-rails ruby closures metaprogramming