Scala:将None用于除空选项之外的其他用途
发布时间:2020-12-16 18:21:48 所属栏目:安全 来源:网络整理
导读:根据文档,无对象旨在“代表不存在的值”.据我所见,它主要用作空选项.但是你认为将它用于其他目的是一个好主意.例如,在我的库中,我希望有一个通用的“空”对象,可以为各种缺失值分配,我只是根据需要将“Empty”值隐式转换为我的类型: // In library:trait A
根据文档,无对象旨在“代表不存在的值”.据我所见,它主要用作空选项.但是你认为将它用于其他目的是一个好主意.例如,在我的库中,我希望有一个通用的“空”对象,可以为各种缺失值分配,我只是根据需要将“Empty”值隐式转换为我的类型:
// In library: trait A { implicit def noneToT1(none: Option[Nothing]): T1 = defaultT1 implicit def noneToT2(none: Option[Nothing]): T2 = defaultT2 def f1: T1 def f2: T2 } // In the code that uses the library class EmptyA extends A { def f1 = None def f2 = None } 不以这种方式(误)使用None的一个原因是用户期望f1和f2分别返回选项[T1]和选项[T2].他们没有.当然,我可以有def f1:选项[T1],但在这种情况下,这些值实际上不是可选的,它们只能有一些默认的空值或实际值,我只想创建默认值“引擎盖“并且通过整个库有一些统一的说法”默认“或”空“.所以问题是,我应该使用None来表达这种“默认”还是选择一些自定义类型?现在我正在使用我自己的对象Empty,但感觉有点多余. 编辑: // In library: trait Empty object Empty extends Empty trait A { implicit def emptyToT1(none: Empty): T1 = defaultT1 implicit def emptyToT2(none: Empty): T2 = defaultT2 def f1: T1 def f2: T2 } // In the code that uses the library class EmptyA extends A { def f1 = Empty def f2 = Empty } class HalfFullA extends A { def f1 = Empty def f2 = someValue2 } class FullA extends A { def f1 = someValue1 def f2 = someValue2 } 我的问题很简单:使用scala的None而不是我的空是一个好主意吗? 解决方法
如果您不能或不想使用继承来定义默认值,我建议保留新对象.重复使用None除了Some对应的东西似乎是错误的,并没有真正为你节省太多.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在shell脚本中设置SSH超时
- .net写的WebService被Java调用
- angularjs – ui-router在使用$state.go()时不运行父状态的
- scala – 如何在没有Akka的情况下实现actor模型?
- linux下命令行操作快捷键及技巧(分享)
- shell – 如何在unix中的每一行的末尾添加文本
- 进程间通信(IPC):共享内存和消息队列原理详解
- twitter-bootstrap – 如何在Bootstrap 3中替换FontAwesome
- scala – 如何调用仅存在于Either中的两种类型之一的方法?
- batch-file – 如何在bash脚本的参数中包含管道字符?