可能重复:
What is the rule for parenthesis in Scala method invocation?
我对Scala很陌生,我对后缀运算符()有一些混淆。
我被告知toLong和toString是任何整数的后缀操作符,所以我尝试了以下操作:
scala> 7 toString
res18: java.lang.String = 7
scala> 7.toString()
res19: java.lang.String = 7
scala> 7.toString
res20: java.lang.String = 7
scala> 7.toLong
res21: Long = 7
scala> 7.toLong()
<console>:8: error: Long does not take parameters
7.toLong()
^那么,什么时候才能在操作员后面使用"()“呢?这里面有什么模式吗?
非常感谢!
发布于 2012-03-19 02:42:49
首先,与后缀操作符相比,将toLong和toString看作是Int类上的方法可能更好。整数文本是Scala中的对象,因此有方法,其中两个是toLong和toString。(诚然,由于隐式转换等原因,Int的情况稍微复杂一些,但这是将其视为初学者的好方法。)
那么省略括号的规则是什么呢?Scala语法允许您在方法不带任何参数的情况下删除()。但是,如果定义方法时没有括号,则根本不允许这样做:
class A() {
def stuff() = "stuff"
def things = "things"
}
val a = new A()
a.stuff // fine
a.stuff() // fine
a.things // fine
a.things() // error!最后,什么时候去掉括号,什么时候保留?按照惯例,在Scala中,我们删除没有副作用的方法的括号,并在有副作用时保留它们。显然,这只是一个样式问题,但它为读者提供了关于您的代码如何工作的额外线索。
发布于 2012-03-19 02:55:36
有关详细信息,请参阅What is the rule for parenthesis in Scala method invocation?。
此外,Int.toLong是在没有括号的情况下定义的,因此不能用括号调用。它很可能没有括号的定义,因为它没有副作用(这是一个惯例)。
由于toString()来自Java,为了实现互操作性,它是用圆括号定义的,因此可以使用或不带括号来调用。
https://stackoverflow.com/questions/9764312
复制相似问题