有没有办法在 F# 中检查一个模式中的嵌套选项值?
Is there a way to check nested option values in one pattern in F#?
假设我们有以下类型:
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 个嵌套的匹配表达式。
您有两种记录类型(您的示例中缺少“=”)。匹配一些更新类型的变量,你可以这样做:
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} -> ""
假设我们有以下类型:
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 个嵌套的匹配表达式。
您有两种记录类型(您的示例中缺少“=”)。匹配一些更新类型的变量,你可以这样做:
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} -> ""