ruby - 编写闭包的正确方法是什么?

标签 ruby closures

我有一个值 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

最佳答案

由于第一个版本工作得非常好,因此没有理由选择第二个版本。

第一个版本和第二个版本之间的唯一区别是,在第二个版本中,有两个变量被封闭,而不是只有一个(strstring_to_test) .

但是,您只能通过使用 bindingeval 检查 lambda 的绑定(bind)来看到这一点,因此实际上差异并不重要。

关于ruby - 编写闭包的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549230/

相关文章:

ruby - 与负整数的 Ruby 数组排序不一致的行为

ruby - 占有泛型量词 {m,n}+ 未在 Ruby 1.9.3 中实现?

scala - 带数组的 Spark 塞

swift - 为什么我不能在此默认参数值中使用速记参数名称?

ruby - 将运算符传递给函数?

css - Gruntfile.js SASS 任务配置

ruby - 用代理对象愚弄 Ruby 的 case 运算符 ===

javascript - 在javascript中循环实例化类使用最后一个值

javascript - 需要帮助来了解Javascript关闭

python - Python 中的闭包