此代码在VS 2010的错误列表中显示错误:
let (a: float), (b: float), (c: int), (d: float), (e: float), (f: float), (g: float), (h: float), (i: float), (j: float), (k: float), (l: float), (abcdefghijklmnopqrstabcdefghijklmnopqrstabc: float ) = 0., 0., 0, 0., 0., 0., [], 0., 0., 0., 0., 0., 0., 0.
将一个字符添加到最后一个变量
let (a: float), (b: float), (c: int), (d: float), (e: float), (f: float), (g: float), (h: float), (i: float), (j: float), (k: float), (l: float), (abcdefghijklmnopqrstabcdefghijklmnopqrstabcd: float ) = 0., 0., 0, 0., 0., 0., [], 0., 0., 0., 0., 0., 0., 0.
导致错误列表中没有错误。
我在很多方面遇到过这样的行为,但总是只有长队。这是F#的一个特性还是一个bug?
Oldrich
答案 0 :(得分:4)
Visual Studio F#支持无法在列255之后执行错误和曲折。如果您查看编译器源中的F#range
类型,您可能会开始收集原因(尽管我认为它应该去至少511个字符);我不记得现在100%确定这个限制的确切位置。
(顺便说一句,我只知道这一点,因为我最近碰到了它,请参阅
上的评论https://github.com/brianmcn/FSharpDepthColorizer/blob/master/ParseTreeDepth/MyFSParser/MyParsing.fs
第267行。)
答案 1 :(得分:3)
我正在使用带有11月CTP的VS2010 shell(不确定这个新的CTP是针对.NET 2.0还是.NET 4.0构建的)
我已经在各种场景中测试过这段代码,这里有点奇怪的事情。但肯定没有“功能”在这里工作,因为@Mauricio指出,这两个let-bindings都不正确。
两者都给出(几乎)正确的输出错误:
期待一个 float * float * int * float * float * float * float * float * float * float * float * float * float但给出了一个 float * float * int * float * float * float * float * float * float * float * float * float * float *'a元组的长度不同 13和14
请注意错误的“给定”部分是错误的。
在这里,我看到的行为与您描述的行为类似:我创建了两个文件Program.fs和Program2.fs,顶级模块test1
和test2
分别包含您的第一个和第二个示例。我得到了一个红色的squigly(sp?)与我们在FSI中的第一个相同的错误信息,但是第二个没有红色的错误(并且通过在第二个中切换'd'字符我能够诱导红色-squigly)。
在上一个示例中尝试构建项目时,我遇到了两个let-bindings的构建错误(与我们通过FSI看到的相同)。
所以看起来好像有两个错误(因为我们实际上无法构建项目,因此很小):
答案 2 :(得分:0)
Visual Studio根据F#编译器(fsc.exe)返回的位置信息提供红色波形和错误导航。不幸的是,从VS2010 SP1开始,F#编译器不提供极右列错误的位置信息。您可以在Visual Studio输出窗口中看到这一点。通常会出现错误:
File.fs(60,213):错误FS0001:此表达式是预期的......
如果列不是213,而是更大的东西(我认为大于255),则会报告错误(并且您可以快乐地找到它):
File.fs:错误FS0001:此表达式是预期的......