字符串插值的符号名称

时间:2015-08-04 12:47:00

标签: scala 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"

虽然它是一个有效的方法名称:

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

不确定这是一个错误还是简单的限制。

1 个答案:

答案 0 :(得分:0)

我不确定,但是当您在λ中使用λ"λx.x"时,它似乎被视为运算符,而对于运算符仅 ASCII可打印字符被允许。因此,如果您将λ替换为llambda等不那么花哨的内容,则可行。

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