在 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
。
因为以下是等价的:
-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
。