gpt4 book ai didi

f# - 为什么 F# 编译器会与 seq{0L..-5L..-10L} 发生冲突?

转载 作者:行者123 更新时间:2023-12-04 14:59:39 25 4
gpt4 key购买 nike

我在声明 int64 的降序时遇到了一些麻烦.

我想要的是这个:

seq{0L..-5L..-10L};;

但是,我收到一个错误:
  seq{0L..-5L..-10L};;
---^^^^^^^^^^^^^^^

stdin(5,4): error FS0739: Invalid object, sequence or record expression

有趣的是,它适用于普通 int :
> seq{0..-5..-10};;
val it : seq<int> = seq [0; -5; -10]

更有趣的是,如果我在 .. 之间加空格,它开始使用 int64也:
> seq{0L .. -5L .. -10L};;
val it : seq<int64> = seq [0L; -5L; -10L]

有人能解释一下为什么编译器会被 seq{0L..-5L..-10L} 弄得一团糟吗? ?

最佳答案

我同意这是一个有点奇怪的行为。通常建议(尽管规范不严格要求)在 .. 周围写空格。在这种情况下它可以正常工作。所以我建议使用:

seq { 0 .. -5 .. -10 }
seq { 0L .. -5L .. -10L }

为什么 int 的行为不同和 int64 ?您可能会注意到,当您写 1..-2 时和 1L..-2 , Visual Studio 对文本进行不同的着色(在第一种情况下 .. 与数字颜色相同,在另一种情况下,它与 .. 颜色相同但带有空格)。

问题是当编译器看到 1. ,它可能意味着一个浮点值( 1.0 )或者它可能是 1.. 的开始,所以这种情况是专门处理的。对于 1L. ,这不是问题- 1L.必须是 1L..的开头.

所以,如果你写 1..-5..-10 ,编译器使用特殊处理并生成一个序列。如果你写 1L..-5..-10 ,然后编译器解析 ..-作为应用于 5L 的一元运算符.写空格解决了一元运算符和 .. 之间的歧义后跟一个负数。

作为引用,这里是我的 Visual Studio 的屏幕截图(显示 10.. 为绿色,但 .. 在第二行中为黄色 - 没有特别明显的差异,但它们是不同的 :-))

enter image description here

关于f# - 为什么 F# 编译器会与 seq{0L..-5L..-10L} 发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com