【发布时间】:2014-12-14 03:51:59
【问题描述】:
在 Tom Stuart 的《Understanding Computation》一书中,有一章专门介绍了通过 Procs/Lambdas 重建 FizzBuzz。他首先讨论了如何通过 procs 定义数字,并表明“数字”可以由运行 x 次数的 proc 来表示它所代表的数字(即 1 是 proc[x], 2是 proc[proc[x]] 等)。这就说得通了。然而,下一点他定义了一个to_integer 方法:
def to_integer(proc)
proc[-> n { n + 1 }][0]
end
这让我的大脑崩溃了。我无法理解这意味着什么。诚然,除了在使用 rails 时范围内的 lambdas 之外,我使用 procs 的次数不多。
我可以把它简化成
def to_integer(proc)
proc[Proc.new(n){ n + 1 }][0]
end
...但这是我所能得到的。谁能以更容易理解的方式解释或简化这一点?这里发生了什么?我对 proc[x][0] 样式感到困惑,n 来自哪里。我只是很难理解这一点。
在书中,传递给这个方法的过程是这样的:
ZERO = -> p { -> x { x } }
ONE = -> p { -> x { p[x] } }
TWO = -> p { -> x { p[p[x]] } }
【问题讨论】: