【发布时间】:2019-02-24 15:38:58
【问题描述】:
我是 Scala 世界的新手,对 OOPS 概念有点困惑。这是我的代码 sn-p。
abstract class Element {
def contents: Array[String]
val lenth = contents.size
val maxLength = contents.map(_.size).max
}
class ArrayElement(var contents: Array[String]) extends Element
据我了解,Scala 编译器会为我们生成 contents , contents_= 方法。因此我们可以避免在基类中定义 def contents 抽象方法。我的理解正确吗?如果是的话
val names = Array("welcome", "apple", "Test")
val names1 = Array("apple", "Test")
var t = new ArrayElement(names);
println(t.contents.mkString(",")) //Op : welcome,apple,Test
t.contents = names1 // because of var
#1 println(t.contents.mkString(",")) // op : apple,Test #2 println(t.lenth) // 这里我得到 3(名字的长度)。但我期待 2 。为什么 ? #3 println(t.maxLength) // 同名参考这里。为什么?
'#1 给出更新的名单。但是#2 和#3 给出了旧名称引用。为什么 ?
【问题讨论】:
标签: scala