首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选项类型和可空类型之间有什么区别?

选项类型和可空类型之间有什么区别?
EN

Stack Overflow用户
提问于 2012-06-21 21:11:23
回答 6查看 3K关注 0票数 17

在F#咒语中,似乎有一种对nullNullable<T>及其同类的本能回避。作为交换,我们应该使用选项类型。老实说,我看不出有什么区别。

  • 我对F#选项类型的理解是,它允许您指定可以包含其任何正常值的类型,即None。例如,除了Option<int>之外,int还允许int拥有的所有值。
  • 我对C#可空类型的理解是,它允许您指定可以包含其任何正常值的类型,即null。例如,Nullable<int> a.k.a int?除了允许null之外,还允许int可以拥有的所有值。

有什么关系呢?用NullableOptionnullNone替换一些词汇表,基本上是一样的。null有什么好大惊小怪的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-21 21:33:00

F#选项是通用的,您可以为任何类型的'T创建Option<'T>

Nullable<T>是一种非常奇怪的类型;您只能将它应用于结构,尽管Nullable类型本身是一个结构,但它不能应用于自身。所以您不能创建Nullable<Nullable<int>>,而可以创建Option<Option<int>>。他们必须做一些框架魔术,以使这一工作为Nullable。在任何情况下,这意味着对于Nullables来说,如果类型是类还是结构,您必须事先知道,如果它是类,则只需要使用null而不是Nullable。这是一个丑陋的、漏洞百出的抽象;它的主要值似乎与数据库互操作有关,因为我猜在数据库域中有‘in,或没有值’对象是常见的。

我认为,当涉及到null和Nullable时,Nullable框架只是一个丑陋的烂摊子。你可以争辩说,F#通过使用Option“增加了混乱”,或者通过建议您避免使用null/Nullable (除非是互操作绝对必要的情况),并将注意力集中在与Option的清洁解决方案上,可以将您从混乱中拯救出来。您可以找到两种观点的人。

你可能也想看看

对无空语言的最佳解释

票数 21
EN

Stack Overflow用户

发布于 2012-06-21 22:14:14

因为每个.NET引用类型都可以具有这个额外的、毫无意义的值--不管它是否为空,存在的可能性以及您必须检查它的可能性--而且由于Nullable使用null表示"nothing“,所以我认为消除所有这些奇怪( F#做的)并要求”无“的可能性是很有意义的。Option<_>就是这么做的。

票数 8
EN

Stack Overflow用户

发布于 2012-06-22 15:13:44

有什么关系呢?

F#允许您选择是否希望您的类型是option类型,并且当您这样做时,鼓励您检查None,并使None的存在或不存在在该类型中显式显示。

C#强制每个引用类型都允许null,并且不鼓励您检查null

因此,这仅仅是违约的区别。

使用Nullable和Option、null和None替换一些词汇表,基本上是一样的。为什么这么大惊小怪?

如SML、OCaml和Haskell等语言所示,删除null可以从实际代码中删除大量运行时错误。在某种程度上,null的最初创建者甚至将其描述为"十亿美元的错误“。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11146825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档