TryParse String to Int Активные шаблоны - PullRequest
0 голосов
/ 25 октября 2018

Здравствуйте, SO. В настоящее время я пытаюсь проанализировать строку в Int, используя активные Patterns и метод Int.TryParse.Используя старые примеры 2012 года, он работал примерно так:

let (|Int|_|) str =
    match System.Int32.TryParse str with
    | true,int -> Some int
    | _ -> None

, но теперь я получаю сообщение об ошибке, сообщающее, что нельзя выбрать правильную перегрузку TryParse ().Обозначая str как строку, ошибка сохраняется.Я надеюсь, что любой из вас мог бы помочь мне с этой простой проблемой, спасибо заранее.

Некоторая дополнительная информация: я пытаюсь сделать это, используя FSharp.Core 4.5.2 и .Net Core 2.1.

Ошибка:

FS0041 Уникальная перегрузка для метода TryParse не может быть определена на основе информации о типе до этой программной точки.Тип аннотации могут быть необходимы.Кандидаты: Int32.TryParse (s: ReadOnlySpan , результат: byref ): bool, Int32.TryParse (s: строка, результат: byref ): bool

Ответы [ 3 ]

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

Тип Span был недавно введен в .Net.

Это один недостаток вывода типа и перегруженных функций: он может сломать существующий код.Тип аннотации является решением.

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

Также рассмотрите возможность использования более идиоматической встроенной функции F # int .

Что-то вроде ...

let tryParseInt s = 
    try 
        s |> int |> Some
    with :? FormatException -> 
        None
0 голосов
/ 25 октября 2018

Обнаружил свою ошибку с помощью Jestar342 в Reddit:

let (|Int|_|) (str:string) =
    match System.Int32.TryParse str with
    | true,int -> Some int
    | _ -> None

Изменение str на (str: string) исправляет эту ошибку.

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