2017-01-13 2 views
0

Если 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

Вы создаете _anonymous реализацию_ признака - так же, как создание анонимной реализации интерфейса в Java. –

ответ

0

Подробнее об анонимном создании экземпляра.

Для примера рассмотрим

trait Runnable { 
    def run: Unit 
} 

Есть два способа создать объект Runnable

  1. Создать класс Foo который расширяет Runnable и создать экземпляр Foo

    class Foo extends Runnable { 
    def run: Unit = println("foo") 
    } 
    
    val a: Runnable = new Foo() 
    
  2. Создать анонимный i nstance Runnable (вам не нужно создавать промежуточный класс (что-то вроде Foo)). Это очень удобно

    val a: Runnable = new Runnable { 
        override def run: Unit = println("foo") 
    } //no need to create an intermediate class. 
    

Его же случай с PartialFunction черты.

В том числе комментария @Tzach Зоар

Вы создаете анонимную реализацию признака - как создать анонимную реализацию интерфейса в Java. - Tzach Zohar

Смежные вопросы