Scala的带对象+的中缀表示法,为什么不可能呢?

标签 scala

我可以这样命名对象,但是不能调用m:

object + {
  def m (s: String) = println(s)
}

无法调用+.m("hi"):
<console>:1: error: illegal start of simple expression
       +.m("hi")

也不能调用+ m "hi"(DSL使用首选)。

但是使用object ++可以正常工作!它们是否与unary_+方法(不存在)冲突?有可能避免这种情况吗?

最佳答案

实际上,一元运算符是不可能的。如果您仍然要调用它,则可以使用由编译器为JVM生成的名称(以美元开头):

scala> object + {
     | def m( s: String ) = println(s)
     | }
defined module $plus

scala> +.m("hello")
<console>:1: error: illegal start of simple expression
       +.m("hello")
        ^

scala> $plus.m("hello")
hello

关于Scala的带对象+的中缀表示法,为什么不可能呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13367122/

相关文章:

scala - Liftweb 环境中的后台任务

xml - 如何在模式匹配中为某些情况添加 XML 节点?

javascriptRouter 不能接受参数

scala - 为什么表达式的值取决于分配给它的变量?

string - 算法帮助 : I need help parsing a string that contains * as a wild card in scala

scala - self 类型注释中 this 和 self 之间的区别?

scala - sbt 中的顺序测试设置/清理

scala - 将元组列表转换为映射(并处理重复键?)

Scala 向右折叠和向左折叠

Scala 和 Hive : best way to write a generic method that works with all types of Writable