当我第一次遇到以下代码时,我很困惑。
在类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
}
答案 0 :(得分:6)
这只是语法。例如,表达式contents.length
被编译为contents
方法的调用,然后在结果上调用length
方法。
通常,零参数方法调用可以省略括号。实际上,在调用方法时,例如contents
方法,在其定义中没有无参数列表的方法时,必须忽略括号 。
请注意,此功能是Scala对uniform access principle的承诺的一部分。 <{1}}方法可以替换为contents
属性,而不会破坏调用方。
答案 1 :(得分:2)
没有什么特别的事情发生。与C ++相比,你会遇到以下差异:
length
与length()
{}
中
更像C / Java的方式是写
def height() : Int = { return contents.length(); }
会做同样的事情,但更加冗长 - 一个很好的演示,说明为什么Scala是阅读代码的一种很棒的语言。