首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候方法需要(或禁止)括号?

什么时候方法需要(或禁止)括号?
EN

Stack Overflow用户
提问于 2012-03-19 02:37:14
回答 2查看 510关注 0票数 6

可能重复:

What is the rule for parenthesis in Scala method invocation?

我对Scala很陌生,我对后缀运算符()有一些混淆。

我被告知toLong和toString是任何整数的后缀操作符,所以我尝试了以下操作:

代码语言:javascript
复制
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()
                      ^

那么,什么时候才能在操作员后面使用"()“呢?这里面有什么模式吗?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-19 02:42:49

首先,与后缀操作符相比,将toLongtoString看作是Int类上的方法可能更好。整数文本是Scala中的对象,因此有方法,其中两个是toLongtoString。(诚然,由于隐式转换等原因,Int的情况稍微复杂一些,但这是将其视为初学者的好方法。)

那么省略括号的规则是什么呢?Scala语法允许您在方法不带任何参数的情况下删除()。但是,如果定义方法时没有括号,则根本不允许这样做:

代码语言:javascript
复制
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中,我们删除没有副作用的方法的括号,并在有副作用时保留它们。显然,这只是一个样式问题,但它为读者提供了关于您的代码如何工作的额外线索。

票数 13
EN

Stack Overflow用户

发布于 2012-03-19 02:55:36

有关详细信息,请参阅What is the rule for parenthesis in Scala method invocation?

此外,Int.toLong是在没有括号的情况下定义的,因此不能用括号调用。它很可能没有括号的定义,因为它没有副作用(这是一个惯例)。

由于toString()来自Java,为了实现互操作性,它是用圆括号定义的,因此可以使用或不带括号来调用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9764312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档