【发布时间】:2012-12-15 22:23:15
【问题描述】:
我正在考虑使用 each() 方法围绕编程语言进行迭代的各种方法。我提出了以下“带产量的内联函数”的想法。它的目的是避免带有非本地返回的闭包,我也见过这种闭包,称为块 lambda。示例伪代码,后面有解释:
class LinkedList
iterator()
# construct and return iterator
inline each()
iter = iterator()
while iter.hasNext()
yield iter.next()
main()
list = LinkedList.new
# add stuff to linked list
list.each()
# somehow the yield in each() populates v
print v
if v == "foo"
return
inline 关键字表示 each() 调用在调用时是内联的,yield 在调用站点被缩进的代码块替换,而“yielded”表达式在示例中为 iter.next(),也作为变量传递给缩进的代码块。实际上,main() 的代码被转换为以下代码
main()
list = LinkedList.new
# add stuff to linked list
# list.each() call transformed
iter = list.iterator()
while iter.hasNext()
v = iter.next()
print v
if v == "foo"
return
list.each() 之后的缩进代码块没有作为闭包传递给 each() 以执行。如果是这样,那么 return 语句的含义就会令人困惑。是从关闭返回,从each()返回,还是从main()返回。
main() 中的 return 语句从 main() 返回,因为 each() 被内联到 main() 的代码中。这避免了带有非本地返回的闭包的复杂性。
我遇到的问题是如何在顶部给出的示例伪代码中填充变量v。我想不出一个合理的好语法。有什么想法吗?
【问题讨论】:
标签: lambda programming-languages closures return