2015-08-04 5 views
5

Zu meiner Überraschung das nicht funktioniert -Symbolische Namen für String-Interpolation

implicit class LambdaContext(val sc: StringContext) extends AnyVal { 
    def λ(args: Any*) = args 
} 

scala> λ"λx.x" 
<console>:1: error: ';' expected but string literal found. 
λ"λx.x" 

Obwohl es eine gültige Methode Name ist:

scala> new LambdaContext(new StringContext("λx.x")).λ() 
res1: Seq[Any] = List() 

nicht sicher, ob es ein Fehler oder eine einfache Einschränkung ist.

Antwort

0

Ich bin nicht sicher, aber wenn man λ in λ"λx.x" verwenden scheint es einen Betreiber und für die Betreiber nur druckbare ASCII-Zeichen darf berücksichtigt werden. Also, wenn Sie λ durch etwas weniger schick wie l oder lambda ersetzen, funktioniert es.

implicit class LambdaContext(val sc: StringContext) extends AnyVal { 
    def l(args: Any*) = λ(args) 
    def λ(args: Any*) = args 
} 

scala> l"lx.x" 
res1: Seq[Any] = List()