F#-从选项类型函数中获取元组的fst元素

问题描述

我正在尝试访问元组的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

这是我的计算机科学课的一项作业,因此要求我使用选项类型。

我正在尝试通过编写另一个函数来访问元组fst元素

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