scala – 定义一个扩展PartialFunction的对象,直接用case实现
发布时间:2020-12-16 09:54:43 所属栏目:安全 来源:网络整理
导读:我对 Scala很新,但我已经爱上了它.我已经阅读了有关部分功能的教程和文章.我想要实现的是让一个对象扩展PartialFunction […,…]并直接用case定义它,而不需要定义isDefinedAt和apply方法. 例如 val partialfuncval : PartialFunction[Int,Boolean] = { case
我对
Scala很新,但我已经爱上了它.我已经阅读了有关部分功能的教程和文章.我想要实现的是让一个对象扩展PartialFunction […,…]并直接用case定义它,而不需要定义isDefinedAt和apply方法.
例如 val partialfuncval : PartialFunction[Int,Boolean] = { case 1 => false } 是部分函数的有效定义.但为什么我不能写 object PartialFunctionClass extends PartialFunction[Int,Boolean] { case 1 => false } ?这将取消定义isDefinedAt和apply的需要,并且会使得编写某些类的类(由我正在使用的lib预定义)类型更容易. 解决方法
这些选项中的一个是否足够你?
选项1 abstract class DelegatingPartialFunction[-T,+R](underlying: PartialFunction[T,R]) extends PartialFunction[T,R] { def apply(t: T) = underlying.apply(t) def isDefinedAt(t: T) = underlying.isDefinedAt(t) } 然后: object PartialFunctionClass extends DelegatingPartialFunction[Int,Boolean]({ case 1 => false }) 选项2 trait DelegatingPartialFunction[-T,+R] extends PartialFunction[T,R] { val underlying: PartialFunction[T,R] def apply(t: T) = underlying.apply(t) def isDefinedAt(t: T) = underlying.isDefinedAt(t) } 然后: object PartialFunctionClass extends DelegatingPartialFunction[Int,Boolean] { val underlying = { case 1 => true } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |