在scala中,是一个单一的方法还是属性?

时间:2016-06-08 14:49:16

标签: scala operator-keyword prefix unary-operator

由于以下内容是等效的:

-2 2.unary_-

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

2.unary_-()

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

error: Int does not take parameters

我正在研究的那本书说unary_-是一种方法,虽然这个错误似乎表明它是Int的一个属性。这是对的吗?

1 个答案:

答案 0 :(得分:2)

从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