我们如何为特质创建一个对象?

时间:2017-01-13 10:37:20

标签: scala partialfunction

如果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")

1 个答案:

答案 0 :(得分:0)

了解匿名实例创建。

例如考虑

trait Runnable {
  def run: Unit
}

有两种方法可以创建Runnable

的对象
  1. 创建一个扩展Runnable的类Foo并创建Foo的实例

    class Foo extends Runnable {
     def run: Unit = println("foo")
    }
    
    val a: Runnable = new Foo()
    
  2. 创建Runnable的匿名实例(您无需创建中间类(类似Foo))。这非常方便

    val a: Runnable = new Runnable {
       override def run: Unit = println("foo")
    } //no need to create an intermediate class.
    
  3. PartialFunction特征的情况相同。

    包括@Tzach Zohar的评论

      

    您正在创建特征的匿名实现 - 就像在Java中创建接口的匿名实现一样。 - Tzach Zohar