问题描述
我正在尝试访问元组的fst元素。通常我使用fst(元组),但是这种情况有些不同。
let getCard (pl : player) : (card * player) option =
let plDeck = pl
match plDeck with
| c1::re -> Some (c1,(re))
| [] -> None
这是我的f#代码。播放器类型是ints
的列表,输出是播放器列表的前int
个元组,播放器列表减去第一个int
。
这是我的计算机科学课的一项作业,因此要求我使用选项类型。
let gc = fst (getCard [1,2,3])
但是由于我收到警告,看来我无法这样做:
该表达式应具有类型 ''a *'b'但这里有类型 “(卡*玩家)选项”
我该如何解决?
解决方法
编译器告诉您,您正在尝试访问元组卡*播放器的选项,而函数fst则期望卡元*播放器的元组。
您可以在getCard函数上进行模式匹配并提取卡。
let result =
match getCard [1..5] with
| Some card -> fst(card)
| None -> -1
您还可以使用模式匹配来提取元组的第一部分。
let result =
match getCard [1..5] with
| Some (card,_) -> card
| None -> -1
按照@Guran的建议,您不应返回幻数
let result =
match getCard [1..5] with
| Some (card,_) -> Some card
| None -> None