为什么有些编程语言会限制您编辑正在循环的数组?

Aar*_* Fi 6 loops programming-languages for-loop

伪代码:

for each x in someArray {
    // possibly add an element to someArray
}
Run Code Online (Sandbox Code Playgroud)

我忘记了某些语言中引发的异常的名称.

我很想知道为什么有些语言禁止这种用例,而其他语言允许这样做.允许的语言是否不安全 - 容易陷入困境?或者禁止语言只是过于谨慎,或者可能是懒惰(他们本可以实现语言来优雅地处理这种情况,但根本没有打扰).

谢谢!

Jim*_*mmy 9

你想要的行为是什么?

list = [1,2,3,4]
foreach x in list:
    print x
    if x == 2: list.remove(1)
Run Code Online (Sandbox Code Playgroud)

可能的行为:

list是一些链表类型迭代器,删除不会影响当前迭代器:

[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

list是一些数组,你的迭代器通过指针增量迭代:

[1,2,4] 
Run Code Online (Sandbox Code Playgroud)

与以前一样,只有系统尝试缓存迭代计数

[1,2,4,<segfault>]
Run Code Online (Sandbox Code Playgroud)

问题是实现这个允许foreach-looping的可枚举/序列接口的不同集合具有不同的行为.