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;

在单独的轨道上,如果 instancethis,则可以删除。

method(argument)

但您不能删除括号,因为解析器会尝试将其解释为 instance method 并失败。

【讨论】:

所以this add "Answer1" 有效,因为它是instance method argumentadd "Answer3",它只是method argument - 不起作用。我只是想用一些语法糖来使代码更加甜美 - 但无论如何 scala 很甜:) -> 非常感谢您的回答。 刚刚在 kotlin 文档 kotlinlang.org/docs/functions.html#infix-notation 上找到了关于这个中缀符号问题的另一个很好的解释:请注意,中缀函数总是需要指定接收者和参数。当您使用中缀表示法在当前接收器上调用方法时,请显式使用this。这是确保解析明确所必需的。

以上是关于Scala使用匿名类主体中的空格调用单参数方法的主要内容,如果未能解决你的问题,请参考以下文章

每天学一点Scala之 匿名函数

接口作为成员变量——实现类和匿名内部类和匿名对象

Scala中方法内的匿名函数

java笔记Java中的匿名类和匿名内部类

Scala快速入门--匿名内部类

Java匿名对象和内部类