我正在考虑使用 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
的,在调用站点被缩进代码块替换,并且iter.next()
在示例中,“yielded”表达式也作为变量传递给该缩进代码块。实际上,代码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 from main()
because中的 return 语句each()
被内联到main()
. 这避免了非本地返回关闭的复杂性。
我遇到的问题是如何v
在顶部给出的示例伪代码中填充变量。我想不出一个合理的好语法。有任何想法吗?