为什么我被迫返回None的类型值?
let getHand = function | Some(card1, card2) -> card1, card2 | None -> // ?
在我的情况下,我想交手.但是如果通过选项不存在手牌,我仍然没有意义.
我不考虑什么?我应该使用什么样的模式?
具体来说,如果没有手,那么我想抓住一个完整的牌组.如果没有结果,为什么方法会产生复杂的类型结果?
| None -> // Why am I still required to yield a typed result
Mark Seemann.. 9
F#中的所有值都有类型.功能也可以.
该getHand
函数看起来像输入一个option
值.由于option
值是Discriminated Union,因此该函数必须解决两种可能的输入情况.编译器和类型系统可以帮助您实现这一目标.
函数类型的一部分是其返回值.在F#中,函数只能有一个返回类型(C#也是如此).因此,您需要同时处理Some
和None
大小写,并使函数在两种情况下都返回相同的类型.但有时,"同一类型"可能是另一个被歧视的联盟.
根据你问题的措辞,听起来你想在两种情况下都返回一些卡片,所以可能会返回一张卡片列表:
let getHand = function | Some(card1, card2) -> [card1; card2] | None -> []
在这里,我在这个None
案例中返回了一个空列表,但是如果你愿意,你可以使用默认列表填充返回值.
F#中的所有值都有类型.功能也可以.
该getHand
函数看起来像输入一个option
值.由于option
值是Discriminated Union,因此该函数必须解决两种可能的输入情况.编译器和类型系统可以帮助您实现这一目标.
函数类型的一部分是其返回值.在F#中,函数只能有一个返回类型(C#也是如此).因此,您需要同时处理Some
和None
大小写,并使函数在两种情况下都返回相同的类型.但有时,"同一类型"可能是另一个被歧视的联盟.
根据你问题的措辞,听起来你想在两种情况下都返回一些卡片,所以可能会返回一张卡片列表:
let getHand = function | Some(card1, card2) -> [card1; card2] | None -> []
在这里,我在这个None
案例中返回了一个空列表,但是如果你愿意,你可以使用默认列表填充返回值.