2017-01-13 2 views
0

Si PartialFunction est un trait, alors comment fonctionne ce code? Créons-nous un objet du trait?Comment créons-nous un objet pour un trait?

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

Vous créez une implémentation anonyme du trait - tout comme vous créez une implémentation anonyme d'une interface en Java. –

Répondre

0

En savoir plus sur la création d'instance anonyme.

Par exemple, considérons

trait Runnable { 
    def run: Unit 
} 

Il y a deux façons de créer un objet de Runnable

  1. Créer une classe Foo qui étend Runnable et créer une instance de Foo

    class Foo extends Runnable { 
    def run: Unit = println("foo") 
    } 
    
    val a: Runnable = new Foo() 
    
  2. Créer un anonyme nstance de Runnable (vous n'avez pas besoin de créer une classe intermédiaire (quelque chose comme Foo)). Ce très pratique

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

Son même cas PartialFunction trait.

Y compris le commentaire de @Tzach Zohar

Vous créez une implémentation anonyme du trait - comme la création d'une mise en œuvre anonyme d'une interface en Java. - Tzach Zohar