【发布时间】:2013-08-12 21:58:13
【问题描述】:
我正在尝试使用 procs 和 ruby 来理解 lambda 演算。这是一些代码:
puts -> x { -> y {x.call(y) } }
# => #<Proc:0x2a3beb0@C:/first-ruby.rb:1 (lambda)>
puts -> x { x + 2}.call(1)
# => 3
在上面的例子中-> 是什么意思? call 方法是否将值传递给调用者,所以在第一个示例中,值y 被传递给y,而在第二个示例中,1 被传递给x?在第二个例子中,为什么1 被评估为x?
【问题讨论】:
-
您想了解 Ruby 还是 Lambda 微积分?你那个袋子里真的有很多猫。对于 Ruby 如何以各种方式处理 lambda,您得到了一些很好的答案。一个 lambda 是一个 Proc。来自内核文档“等效于 Proc.new,除了生成的 Proc 对象检查调用时传递的参数数量。”所以 Kernel 具有 lambda 函数或方法,但您可以通过查看具有 lambda 的 Proc 来了解更多信息?并检查 Proc 的类型,其中对于常规 Proc 对象会忽略额外参数,但对于 lambdas 可能会引发错误。
-
不幸的是 -> 函数在 Ruby 中的文档很少,所以我们必须依靠 Ruby 社区来找到它的用法。我不是计算机科学专业的人,但它的逻辑确实与en.wikipedia.org/wiki/Lambda_calculus 密切相关
-
我确实找到了这个词。在 Ruby 中尝试“匿名 lambdas”
标签: ruby lambda lambda-calculus