Блок после 'let' не завершен - попробуйте / с - PullRequest
0 голосов
/ 21 января 2019

Следуйте коду F #:

try
    let result = 100/0
with
    | :? Exception as ex -> printfn ex.Message

Я получаю сообщение об ошибке:

Блок после 'let' является незаконченным. Каждый блок кода является выражение и должен иметь результат. «пусть» не может быть окончательным кодом элемент в блоке. Попробуйте дать этому блоку явный результат.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я могу рекомендовать другой подход. Это не оставит переменную result неопределенной.

let result =
    try
        Some(100/0)
    with
        | :? Exception as ex -> printfn "%s" ex.Message; None
0 голосов
/ 21 января 2019

Проблема в том, что let само по себе не является выражением:

В F # все является выражением определенного типа.Но let само по себе не является выражением, это связывание, и его следует продолжить с некоторым выражением, которое, по-видимому, использует значение, связанное с идентификатором result.

, поскольку вы просто тестируете попытку/ поймать функциональность.Я предполагаю, что вы на самом деле не заинтересованы в создании каких-либо значений, поэтому я добавил выражение: () после let.

try
    let result = 100/0
    ()
with
    ex -> printfn "%s" ex.Message

Выражение try/with требует, чтобы обе стороны возвращали одно и то жетип значения, как if/then/else.Поскольку на стороне with 1016 * возвращает unit, я сделал так, чтобы сторона try также возвращала значение unit, равное ().Думайте об этом как эквивалент void в C #.

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