Блок незавершенный

Этот фрагмент кода скомпилирован:

let test =
    let x = 1
    printfn "%A" x

Если последняя строка удалена, возникает следующая ошибка компиляции:

error FS0588: Block following this 'let' is unfinished. Expect an expression.

Что означает это сообщение? В С#/С++ я ожидал бы предупреждение "Неиспользуемая переменная" в такой ситуации, но F # дает что-то другое.

Ответы

Ответ 1

В F # функция должна привязывать имя к значению.

Оператор printfn имеет возвращаемое значение, и в конечном итоге это связано с test.

Без оператора printfn у вас есть только оператор, связывающий значение 1 с x. Компилятор будет ожидать чего-то связанного с тестированием. Поскольку тестовая функция останавливается на этом этапе, вот почему вы видите компилятор.

Если вы хотите, чтобы ваша функция просто делала материал (возможно, с побочными эффектами), вы должны закончить свою функцию с помощью ()