Согласование шаблонов в let binding в F #

Я хочу сделать:

let Some(x) = bar in ...

но я не могу этого сделать, если не сделаю

let Some(x) as idontcare = bar in ...

есть ли лучший способ сказать: "Меня не волнует весь узор, просто совпадающий внутри",

(Я бы использовал _ но это не анализируется, поэтому я использую __)

Да, я знаю, что это частично, я просто делаю быстрый сценарий.

Edit: Также это всего лишь пример со встроенным типом суммы, поэтому Option.get не является общим; плюс я хочу, чтобы это было встроено как Haskell let-bindings.

2 ответа

let Some(x) = bar

определяет новую функцию Some, затеняя существующий конструктор. Вместо этого вы хотите:

let (Some(x)) = bar


Вы можете использовать match:

match bar with | Some(x) -> ...

если вы пытаетесь сопоставить параметр, вы можете использовать Option.get:

bar |> Option.get |> ...

licensed under cc by-sa 3.0 with attribution.