2015-08-04 3 views
5

К моему удивлению, это не работает -символьные имена для интерполяции строк

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" 

Хотя это действительное имя метода:

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

Не уверен, если это ошибка или просто ограничение.

ответ

0

Я не уверен, но если вы используете λλ"λx.x" в это, кажется, считается оператором и для операторов только ASCII печатаемых символов разрешены. Итак, если вы замените λ чем-то менее фантастическим, например l или lambda, он работает.

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()