F#-从选项类型函数获取元组的fst元素
我试图访问元组的fst元素。通常我使用fst(tuple),但这种情况有点不同F#-从选项类型函数获取元组的fst元素,f#,tuples,option,F#,Tuples,Option,我试图访问元组的fst元素。通常我使用fst(tuple),但这种情况有点不同 let getCard (pl : player) : (card * player) option = let plDeck = pl match plDeck with | c1::re -> Some (c1,(re)) | [] -> None 这是我的f代码。播放器类型是一个int列表,输出是播放器列表的第一个int的元组,播放器列表减去第一个int 这是
let getCard (pl : player) : (card * player) option =
let plDeck = pl
match plDeck with
| c1::re -> Some (c1,(re))
| [] -> None
这是我的f代码。播放器类型是一个int
列表,输出是播放器列表的第一个int
的元组,播放器列表减去第一个int
这是我计算机科学课上的作业,所以要求我使用选项类型
我试图通过编写
let gc = fst (getCard [1,2,3])
但我似乎不能这样做,因为我得到了警告:
此表达式应具有类型
“a*”b“但这里有类型
“(卡*玩家)选项”
如何解决这个问题?编译器告诉您正在尝试访问tuple card*player选项,而函数fst需要一个tuple card*player 您可以在getCard函数上进行模式匹配并提取卡
让结果=
将getCard[1..5]与
|一些卡片->fst(卡片)
|无->-1
您还可以使用模式匹配来提取元组的第一部分
让结果=
将getCard[1..5]与
|一些(卡片)->卡片
|无->-1
正如@Guran所建议的,你不应该返回幻数
让结果=
将getCard[1..5]与
|一些(卡片)->一些卡片
|无->无
getCard
返回一个选项,fst
接收一个元组,因此不能将getCard
的返回值传递给fst
。考虑使用<代码> GC/<代码>也是一种选择。但是使用像“1”这样的“魔法值”是不好的形式。在这里使用选项作为返回值要好得多。ieSome card
respNone
true我假设op只是想要这个值。但是,考虑到这是一项旨在引入期权类型的任务,它当然也适合用于最终结果。谢谢,这是一个很好的解决方案!