Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 为什么我必须为None返回一个类型化的值?_F# - Fatal编程技术网

F# 为什么我必须为None返回一个类型化的值?

F# 为什么我必须为None返回一个类型化的值?,f#,F#,为什么我必须为None返回一个类型化的值 let getHand = function | Some(card1, card2) -> card1, card2 | None -> // ? 就我而言,我想帮你一把。但是,如果通过期权不存在手牌,那么我仍然进行手牌交易是没有意义的 我没有考虑什么? 我应该使用什么模式 具体地说,如果没有人手,那么我想抓一整副牌。 如果不存在结果,为什么方法会产生复杂类型的结果 | None -> // Why am I sti

为什么我必须为None返回一个类型化的值

let getHand = function
    | Some(card1, card2) -> card1, card2
    | None -> // ?
就我而言,我想帮你一把。但是,如果通过期权不存在手牌,那么我仍然进行手牌交易是没有意义的

我没有考虑什么? 我应该使用什么模式

具体地说,如果没有人手,那么我想抓一整副牌。 如果不存在结果,为什么方法会产生复杂类型的结果

| None -> // Why am I still required to yield a typed result
F#中的所有值都有类型。函数也可以

getHand
函数看起来像是将一个
选项
值作为输入。由于
选项
值是一个有区别的并集,因此函数必须处理两种可能输入的情况。编译器和类型系统可以帮助您完成这项工作

函数类型的一部分是其返回值。在F#中,函数只能有一个返回类型(C#也是如此)。因此,您需要处理
Some
None
两种情况,并使函数在这两种情况下返回相同的类型。不过,有时候,这种“同一类型”可能是另一种歧视性的联盟

从你问题的措辞来看,这两种情况下,听起来你都想退回一些卡片,因此,或许可以退回卡片列表:

let getHand = function
    | Some(card1, card2) -> [card1; card2]
    | None -> []
在这里,我在
None
案例中返回了一个空列表,但是如果您愿意,可以用默认列表填充返回值。

F#中的所有值都有类型。函数也可以

getHand
函数看起来像是将一个
选项
值作为输入。由于
选项
值是一个有区别的并集,因此函数必须处理两种可能输入的情况。编译器和类型系统可以帮助您完成这项工作

函数类型的一部分是其返回值。在F#中,函数只能有一个返回类型(C#也是如此)。因此,您需要处理
Some
None
两种情况,并使函数在这两种情况下返回相同的类型。不过,有时候,这种“同一类型”可能是另一种歧视性的联盟

从你问题的措辞来看,这两种情况下,听起来你都想退回一些卡片,因此,或许可以退回卡片列表:

let getHand = function
    | Some(card1, card2) -> [card1; card2]
    | None -> []

在这里,我在
None
案例中返回了一个空列表,但是如果您愿意,您可以用默认列表填充返回值。

Mark Seemann的答案的另一个解决方案是也返回
选项。您可以编写(更改是因为您自己的函数将变得微不足道):

或者更好


最后一个(通常是坏的)解决方案是使用对
None
抛出异常。

Mark Seemann回答的另一个解决方案是也返回
选项。您可以编写(更改是因为您自己的函数将变得微不足道):

或者更好

最后(通常是糟糕的)解决方案是使用在
None
上抛出异常