F# 如何访问元组中的项,该元组是一个有区别的联合?
假设我这样声明一个类型:F# 如何访问元组中的项,该元组是一个有区别的联合?,f#,F#,假设我这样声明一个类型: type Kvp = Kvp of string * int 我创建了一个实例 let inst = Kvp("twelve", 12) 如何从inst获取第一个和第二个值?Fst和snd不起作用: fst inst;; stdin(81,5): error FS0001: This expression was expected to have type 'a * 'b but here has type Kvp 因为DU不是元组,所以会出现错误
type Kvp = Kvp of string * int
我创建了一个实例
let inst = Kvp("twelve", 12)
如何从inst获取第一个和第二个值?Fst和snd不起作用:
fst inst;;
stdin(81,5): error FS0001: This expression was expected to have type
'a * 'b
but here has type
Kvp
因为DU不是元组,所以会出现错误。但您可以在DU上进行模式匹配:
type Kvp = Kvp of string * int
let inst = Kvp("twelve", 12)
let (a,b) =
match inst with
| Kvp(a,b) -> (a,b)
//val b : int = 12
//val a : string = "twelve"
和中间的某个地方有匹配函数的例子。 如s952163所述,模式匹配是您想要的。然而,好的语法是
type Kvp = Kvp of string * int
let inst = Kvp("twelve", 12)
let (Kvp (str,i)) = inst
// val str : string = "twelve"
// val i : int = 12
您还可以使用\uuu
放弃您不想要的内容:
let (Kvp (str,_)) = inst
顺便说一句,我不确定您想做什么,但有一个内置的键值对活动模式:和