2014-02-21 68 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