根据 F# 规范(参见§6.5.7),简单的 for 循环受整数(int
又名int32
aka System.Int32
)限制start
和stop
,例如
for i = start to stop do
// do sth.
我想知道为什么这种类型的 for 循环的迭代边界必须是int32
. 为什么不允许uint32
?int64
? bigint
?
我知道序列迭代表达式(for ... in ...
)可以迭代任意序列;然而,这需要分配一个迭代器并调用MoveNext
andCurrent
什么不是,因此可能比普通循环效率低得多(增量计数器,比较,条件跳转)。为避免这种情况,您不得不使用while
和手动递增循环计数器......
奇怪的是,如果表达式包含在序列表达式中,F#确实允许非int32
循环边界,例如for
seq { for i = 0I to 10I do
printfn "%A" i }
所以,我想问题是:是否有特殊原因只允许int32
循环?为什么这个限制不适用于包含在表达式中的for
循环?seq