Подробный синтаксис не работает в облегченном режиме F # - PullRequest
0 голосов
/ 27 сентября 2018

В руководстве по Microsoft F # сказано, что подробный синтаксис всегда включен в F #.Если я правильно понимаю, это означает, что код F #, написанный с использованием подробного синтаксиса, должен давать тот же результат, независимо от того, включен ли облегченный синтаксис.

Однако приведенный ниже фрагмент кода печатает число 6 десять раз

#light "off"

let f x = for i = 1 to 10 do printfn "%d" x done in f 6

, в то время как следующее генерирует ошибку: Unexpected keyword 'in' in binding. Expected incomplete structured construct at or before this point or other token.

let f x = for i = 1 to 10 do printfn "%d" x done in f 6

Какова структурная разница между этими двумя фрагментами и почему ошибка генерируется, когда включен облегченный синтаксис?

1 Ответ

0 голосов
/ 04 октября 2018

Этот подробный код:

#light "off"

let f x = for i = 1 to 10 do printfn "%d" x done in f 6

эквивалентен этому облегченному коду:

let f x = 
    for i = 1 to 10 do 
        printfn "%d" x 
f 6

в облегченном режиме отступ определяет блоки, в подробном режиме do ... done - этовнутренний блок for и let ... in ... является блоком выражения f 6.

Относительно того, почему он жалуется, когда включен легкий вес, есть 2 возможности:

  • Это может быть ошибка в парсере.Очень немногие люди используют многословие, и оно могло остаться незамеченным.

  • Также возможно, что обе версии не полностью совместимы.Документация действительно гласит:

, даже если вы включите облегченный синтаксис, вы все равно можете использовать подробный синтаксис для некоторых конструкций.

Обратите внимание, как он говорит«некоторые», а не «все».

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