Ограничение длины строки в F # - Ошибка или функция? - PullRequest
3 голосов
/ 26 ноября 2010

Этот код выдает ошибку в списке ошибок 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.

не приводит к ошибке в ошибкеlist.

Я встречал такое поведение во многих отношениях, но всегда только в длинных строках.Это особенность F # или это ошибка?

Oldrich

Ответы [ 3 ]

4 голосов
/ 26 ноября 2010

Поддержка Visual Studio F # не может делать ошибки и зацикливается на столбце 255. Если вы посмотрите на тип F # range в исходных текстах компилятора, вы, возможно, начнете понимать, почему (хотя я думаю, что это действительно должно идти по крайней мере 511 символов); Я не помню на 100% точно сейчас, где именно находится ограничение.

(Кстати, я знаю это только потому, что недавно столкнулся с этим, см. Комментарий на

https://github.com/brianmcn/FSharpDepthColorizer/blob/master/ParseTreeDepth/MyFSParser/MyParsing.fs

строка 267.)

3 голосов
/ 26 ноября 2010

Я использую оболочку VS2010 с ноябрьской CTP (не совсем уверен, был ли этот новый CTP построен на .NET 2.0 или .NET 4.0)

Я тестировал этот код в различных сценариях, и здесь происходит что-то странное. Но, разумеется, здесь нет «функций», так как, как указал @Mauricio, оба эти привязки не верны.

Interactive

Оба дают (почти) правильную ошибку для вывода:

Ожидая плавать * плавать * int * плавать * плавать * плавать * плавать * плавать * плавать * плавать * плавать * плавать * плавать, но с учетом плавать * плавать * int * плавать * плавать * плавать * плавать * плавать * плавать * float * float * float * float * 'a Кортежи имеют различную длину 13 и 14

Обратите внимание, что «данная» часть ошибки неверна.

Обнаружение ошибок на лету в VS Editor

Здесь я вижу поведение, похожее на то, что вы описываете: я создал два файла Program.fs и Program2.fs с модулями верхнего уровня test1 и test2, содержащими ваш первый и второй примеры соответственно. Я получаю красный волнистый (sp?) С тем же сообщением об ошибке, которое было у нас в FSI для первого, но без красного волнистого для второго (и переключая символ 'd' во второй, я смог вызвать красный -squigly).

Компиляция

При попытке построить проект в предыдущем примере я получаю ошибки сборки для обеих привязок let (так же, как мы видим через FSI).

Заключение

Похоже, здесь есть две ошибки (незначительные, поскольку мы не можем на самом деле построить проект):

  1. Сообщение об ошибке неверно
  2. Неправильное обнаружение ошибок в редакторе
0 голосов
/ 16 мая 2012

Visual Studio предоставляет красные кривые и навигацию по ошибкам на основе информации о положении, возвращаемой компилятором F # (fsc.exe). К сожалению, начиная с VS2010 SP1, компилятор F # не предоставляет информацию о местоположении для ошибок в крайних правых столбцах. Вы можете увидеть это в окне вывода Visual Studio. Обычно ошибка появляется так:

File.fs (60 213): ошибка FS0001: ожидалось это выражение ...

Если столбец не 213, а скорее что-то большее (я думаю, выше 255), об ошибке сообщается следующим образом (и вы получите удовольствие от ее поиска):

File.fs: ошибка FS0001: ожидалось это выражение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...