假设我声明一个类似的类型:
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
答案 0 :(得分:3)
正如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
您也可以使用_
丢弃您不想要的内容:
let (Kvp (str,_)) = inst
答案 1 :(得分:2)
因为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"
在F# Fun中间的某个地方有一个匹配函数的例子。