我对使用/重载“范围步长”运算符(.. ..)感兴趣,但是我一生都无法找到如何使用它的方法。

在文档中说

// Usage:
start .. step .. finish

但是在F#shell中尝试该操作会出现错误:
> let x = 1 .. 2 .. 7;;

  let x = 1 .. 2 .. 7;;
  ----------^^

stdin(54,11): error FS0010: Unexpected symbol '..' in binding. Expected incomplete structured construct at or before this point or other token.

但是,可以“明确地”将其称为:
> let x = (.. ..) 1 2 7;;

val x : seq<int>

只能使用此运算符来构造列表/序列,例如[1..2..7]seq {1..2..7}吗?

最佳答案

spec 并不明确,但是给出的唯一示例在序列表达式中。这以及其他所有方法都无法奏效的事实似乎证实了您的结论。

仅供引用-这是范围运算符的相关文档。

Operators.( .. )<^T>
Operators.( .. .. )<^T,^Step>

Section 3.8.2还提到了(.. ..)的特殊处理,因此可以放心地假设它除了典型的功能/运算符之外还受到限制/行为的限制。

关于F#(.. ..)运算符使用/重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8852776/

10-16 19:06