当我第一次遇到以下代码时,我感到很困惑。

在Element类中,有三个函数定义。

为什么高度和宽度可以直接将内容用作Array [String]的变量?

是因为Scala中的每个函数都是对象还是其他规则?

我来自C ++世界,因此定义确实使我感到困惑。

abstract class Element {
  def contents: Array[String]
  def height: Int = contents.length
  def width: Int = if (height == 0) 0 else contents(0).length
}

最佳答案

这只是语法。例如,将表达式contents.length编译为contents方法的调用,然后将其编译为结果的length方法。

通常,在零参数方法调用中可以省略括号。实际上,在调用定义中没有参数列表的方法(例如contents方法)时,必须省略括号。

请注意,此功能是Scala对uniform access principle的承诺的一部分。可以将contents方法替换为contents属性,而不会破坏调用方。

关于scala - 在scala中,使用函数名称作为返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12453168/

10-16 17:42