如果你使用像你在聲明下面的代碼,該代碼name
應該是抽象的:
class A {
var name: String
}
我想你已經知道了。所以你的問題不是語法上的。 答案與其他可能的抽象候選一致。
假設你想要做這樣的事情:
class A {
var variable: String = _ // variable has some default value (probably null)
val value: String = _ // value cannot have any default values, since it cannot be reassigned later.
def method: String = _ // method could return some default value (probably null)
type theType = _ // what should the default type be? (Any perhaps?)
}
最後三個例子甚至不編譯。現在假設你想要做這樣的事情:
class A {
var variable: String
val value: String
def method: String
type theType
}
從我的角度來看,即使有人勉強誰瞭解斯卡拉看到只聲明。沒有辦法曲解它們,因爲除了聲明之外什麼都沒有。當你來自另一種語言並且假設有一些默認值時,唯一的混淆就產生了。但是,只要你看到第一個例子(具有默認值的例子),這種混淆就消失了。而且你的類必須是抽象層次結構的一部分才能被允許聲明抽象成員,所以即使你對這個語言還不熟悉,你已經從編譯器中獲得了一些額外的幫助。
我希望這可以回答你的問題和快樂的編碼。
Martin的偏好是我的猜測:-)至少它是明確的,額外的2個字符(4個空格)並不是非常令人生畏的。 Java(一種非常冗長的語言)讓賦值被省略似乎很愚蠢。另外,說「構造函數參數」(不知道它們實際稱爲: - /)不是被強制初始化 - 它們當然是在對象被實例化時。 – 2011-09-03 04:45:51