如果PartialFunction是一个特征,那么这段代码是如何工作的?我们是在创造特质的对象吗?
def x=new PartialFunction[Any, Unit] {
def isDefinedAt(x: Any) = x match {
case "hello" => true
case "world" => true
case _=> false
}
def apply(x: Any) = x match {
case "hello" => println("Message received hello")
case "world"=> println("Message received world")
}
}
x("hello")
if (x.isDefinedAt("bye") ){ x("bye")}
x("bye")
答案 0 :(得分:0)
了解匿名实例创建。
例如考虑
trait Runnable {
def run: Unit
}
有两种方法可以创建Runnable
的对象创建一个扩展Runnable的类Foo
并创建Foo
的实例
class Foo extends Runnable {
def run: Unit = println("foo")
}
val a: Runnable = new Foo()
创建Runnable的匿名实例(您无需创建中间类(类似Foo
))。这非常方便
val a: Runnable = new Runnable {
override def run: Unit = println("foo")
} //no need to create an intermediate class.
与PartialFunction
特征的情况相同。
包括@Tzach Zohar的评论
您正在创建特征的匿名实现 - 就像在Java中创建接口的匿名实现一样。 - Tzach Zohar