Есть ли способ проверить вложенные значения параметров в одном шаблоне в F #? - PullRequest
0 голосов
/ 29 мая 2020

Давайте представим, что у нас есть следующие типы:

type Message {
    text : Option<string>
}

type Update {
    msg : Option<Message> 
}

Как мне сопоставить его в одной строке, например, C#, используя нулевой условный оператор, т.е. update?.msg?.text?

Есть ли способ сделать это вот так ?:

match msg, msg.text with 
| Some msg, Some txt -> ...
| None -> ...

, потому что я не хочу писать 2 вложенных выражения соответствия.

1 Ответ

3 голосов
/ 29 мая 2020

У вас есть два типа записей (в вашем примере отсутствует знак "="). Чтобы сопоставить некоторую переменную типа обновления, вы можете сделать следующее:

type Message = { text : Option<string> }

type Update = { msg : Option<Message> }

let u = {msg = Some({text = Some "text"})}

//all 3 possible cases
match u with
| {msg = Some({text = Some t})} -> t
| {msg = Some({text = None})} -> ""
| {msg = None} -> ""
...