如果你使用像你在声明下面的代码,该代码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