我有一个值 X。稍后我将使用该值。我实际上并不关心这个值是什么,但一段时间后我会得到另一个值 Y,我想知道 X == Y 是否。
保存此类数据的一种方法是创建一个像这样的闭包:
def createExactMatchClosure(str)
return lambda { |t|
return str == t
}
end
现在我可以使用此代码来测试另一个变量是否等于我原来的变量:
myOriginalValue = "hello"
testerFunction = createExactMatchClosure(myOriginalValue)
puts testerFunction.call("hello").to_s # prints true
我的问题是,以下内容更好/更差/不同吗?我在教程中看到过这两种方法。
def createExactMatchClosure(str)
string_to_test = str
return lambda { |t|
return string_to_test == t
}
end
最佳答案
由于第一个版本工作得非常好,因此没有理由选择第二个版本。
第一个版本和第二个版本之间的唯一区别是,在第二个版本中,有两个变量被封闭,而不是只有一个(str
和 string_to_test
) .
但是,您只能通过使用 binding
和 eval
检查 lambda 的绑定(bind)来看到这一点,因此实际上差异并不重要。
关于ruby - 编写闭包的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549230/