F # - Печать результата выражения соответствия - PullRequest
0 голосов
/ 04 октября 2018

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

У меня есть следующий код, который отправляет HTTP-запрос, затем он соответствует результату.Если он ничего не соответствует (| _), я хочу просто вывести его строковое значение на консоль.Как мне поступить так?

    match Http.RequestString("http://foo.com/res.php", 
                          httpMethod = "GET", 
                          query = ["key", key; "action", "get"; "id", id]) with
     | "CAPCHA_NOT_READY" -> printfn "Sleeping for 5"
                             Thread.Sleep(5000)
                             GetCaptchaRequest id
     | _  -> printfn ???

1 Ответ

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

Символ подчеркивания используется, когда вы не заботитесь о значении и не будете использовать его в последующем коде.Вам просто нужно дать переменной имя.Попробуйте это:

| msg -> printfn "%s" msg

В этом примере я выбрал msg в качестве имени переменной, но это может быть любое допустимое имя переменной, которое вы выберете.

Поскольку все ветвиmatch оператор должен возвращать тот же тип, вам нужно больше, чем просто printfn оператор.В подобных случаях, когда внешний вызов потенциально может завершиться сбоем, обычно используется тип Option<'a> для представления успеха или неудачи.

Не зная специфики вашей конечной точки API, рассмотрите этот псевдокод:

let GetCaptchaRequest id : string option =
        match Http.RequestString("http://foo.com/res.php", 
                              httpMethod = "GET", 
                              query = ["key", key; "action", "get"; "id", id]) with
         | "CAPCHA_NOT_READY" -> printfn "Sleeping for 5"
                                 Thread.Sleep(5000)
                                 GetCaptchaRequest id
         | "ERROR" -> printfn "Something went wrong!"
                      None
         | result  -> printfn "Successful result!"
                      Some (parseMyCaptchaResult result)
...