当前位置:  开发笔记 > 编程语言 > 正文

为什么我被迫返回None的类型值?

如何解决《为什么我被迫返回None的类型值?》经验,为你挑选了1个好方法。

为什么我被迫返回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#也是如此).因此,您需要同时处理SomeNone大小写,并使函数在两种情况下都返回相同的类型.但有时,"同一类型"可能是另一个被歧视的联盟.

根据你问题的措辞,听起来你想在两种情况下都返回一些卡片,所以可能会返回一张卡片列表:

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

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



1> Mark Seemann..:

F#中的所有值都有类型.功能也可以.

getHand函数看起来像输入一个option值.由于option值是Discriminated Union,因此该函数必须解决两种可能的输入情况.编译器和类型系统可以帮助您实现这一目标.

函数类型的一部分是其返回值.在F#中,函数只能有一个返回类型(C#也是如此).因此,您需要同时处理SomeNone大小写,并使函数在两种情况下都返回相同的类型.但有时,"同一类型"可能是另一个被歧视的联盟.

根据你问题的措辞,听起来你想在两种情况下都返回一些卡片,所以可能会返回一张卡片列表:

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

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

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有