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