Scala使用匿名类主体中的空格调用单参数方法
Posted
技术标签:
【中文标题】Scala使用匿名类主体中的空格调用单参数方法【英文标题】:Scala call single parameter method using space in anonymous class body 【发布时间】:2022-01-23 19:39:48 【问题描述】:在 scala 中,如何使用匿名类主体中的空格调用单参数方法?
add "Answer3"
下面不工作
trait Question
def add(answer:String):Unit =
println("Received the answer=" + answer)
object Test
val question:Question = new Question
this add "Answer1" // working
add("Answer2") // working
add "Answer3" // NOT working, why? -> error: ';' expected but string literal found.
【问题讨论】:
【参考方案1】:您试图混合使用两种不同且相互冲突的便捷语法选项。
instance.method(argument)
...可以表示为...
instance method argument
...如果method()
不带参数,那么也可以用空格表示,但解析器需要一点帮助。
instance method;
在单独的轨道上,如果 instance
是 this
,则可以删除。
method(argument)
但您不能删除括号,因为解析器会尝试将其解释为 instance method
并失败。
【讨论】:
所以this add "Answer1"
有效,因为它是instance method argument
和add "Answer3"
,它只是method argument
- 不起作用。我只是想用一些语法糖来使代码更加甜美 - 但无论如何 scala 很甜:) -> 非常感谢您的回答。
刚刚在 kotlin 文档 kotlinlang.org/docs/functions.html#infix-notation 上找到了关于这个中缀符号问题的另一个很好的解释:请注意,中缀函数总是需要指定接收者和参数。当您使用中缀表示法在当前接收器上调用方法时,请显式使用this
。这是确保解析明确所必需的。以上是关于Scala使用匿名类主体中的空格调用单参数方法的主要内容,如果未能解决你的问题,请参考以下文章