2014-02-21 35 views
4

我对Scala很陌生,但我已经喜欢它了。我已阅读关于部分功能的教程和文章。我想要实现的是让对象扩展PartialFunction [...,...],并直接定义案例,而无需定义isDefinedAt并应用方法。定义一个扩展PartialFunction的对象,直接使用案例

例如

val partialfuncval : PartialFunction[Int,Boolean] = { 
    case 1 => false 
} 

是一个局部函数的有效定义。但为什么我不能写

object PartialFunctionClass extends PartialFunction[Int,Boolean] { 
    case 1 => false 
} 

?这将取消定义isDefinedAt和apply的需要,并且会使得更容易编写某些类(由我使用的lib预先定义)类的编写。

+0

我知道,这将禁止这个类的其他成员的定义,但在这种特殊情况下,它实际上会让事情变得更容易。我应该要求这个lang功能吗?或者这可以用我不知道的方式实现吗? – azyoot

回答

6

这些选项中的一个足以满足您的需求吗?

选项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 
    } 
} 
+0

是的,非常感谢! – azyoot