可能重复:
Scala方法调用中括号的规则是什么?
我是Scala的新手,我对postfix运算符上的()有一些困惑
我被告知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()
^
Run Code Online (Sandbox Code Playgroud)
那么,何时在运营商之后使用"()"?那有什么模式吗?
十分感谢!
dhg*_*dhg 13
首先,考虑到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!
Run Code Online (Sandbox Code Playgroud)
最后,你什么时候放下括号,什么时候保留它们?按照惯例,在Scala中,我们删除没有副作用的方法的括号,并在有副作用时保留它们.显然这只是一种风格,但它为读者提供了关于代码如何工作的额外线索.
请参阅Scala方法调用中括号的规则是什么?了解详细信息.
另外Int.toLong定义没有括号,因此不能用括号调用.它很可能是在没有括号的情况下定义的,因为它没有副作用(这是一种约定).
由于toString()来自Java,为了实现互操作性,它是用括号定义的,因此可以使用或不使用括号来调用.