在 scala 中,unary_ 是方法还是 属性?

In scala, is a unary_ a method or a property?

因为以下是等价的:

-2 2.unary_-

并且由于括号对于没有参数的方法是可选的,所以不应该

2.unary_-()

也评估为 -2 ?相反,我得到:

error: Int does not take parameters

我正在研究的书说 unary_- 是一种方法,尽管这个错误似乎暗示它是 Int 的 属性。这是正确的吗?

根据 evan058 的建议,我决定 运行 一个实验:

class Myint1(n:Int) {
    def unary_-() = -n /* method definition has parentheses */
}

class Myint2(n: Int) {
    def unary_- = -n /* no parentheses in definition */
}
val n1 = new Myint1(3)
val n2 = new Myint2(3)

n1.unary_- /* prints -3 */
n2.unary_- /* also gives -3 */

n1.unary_-() /* prints -3 */
n2.unary_-() /* throws error: Int does not take parameters */

所以 unary_- 是一种方法,而不是 属性。该行为的原因是带括号和不带括号的方法定义之间存在差异。请注意,-n1-n2 都会导致 -3