在Ceylon中,以下类有一个包含两个局部变量的初始化器
class Person(Name n, Address a) { Name name = n; Address address = a; ... }
以下类有两个属性,使其成为典型的 data
类
class Person(Name n, Address a) { shared Name name = n; shared Address address = a; ... }
(Theshared注解的效果是 捕获 声明name和address.)
上述代码有问题。我给了参数n和asilly
class Person(Name name, Address address) { shared Name name = name; shared Address address = address; ... }
愚蠢的名称,以避免与属性发生名称冲突。由于在Ceylon中,参数的名称很重要,这实际上是一个问题。语言规范目前通过说类初始化器参数会隐藏类体内部具有相同名称的属性来解决此问题。因此以下代码是合法的
//Equivalent Java code, even without the getters! class Person { public Name name; public Address address; Person(Name name, Address address) { this.name = name; this.address = address; } ... }
这让我感觉有点临时,但它确实解决了问题,而没有破坏任何东西。然而,上述代码确实看起来有点像样板代码。我的意思是,它比
class Person(shared Name name, shared Address address) { ... }
要好得多shared,但我们仍然感觉有改进的空间。我想知道我们是否应该在Ceylon中允许以下快捷方式
我的意思是,参数就像其他任何局部变量一样,为什么我们不能使其
class Person(doc "the name of the person" shared Name name, doc "the address of the person" shared variable Address address) { ... }
,就像我们可以使用在类体内声明的局部变量一样?我唯一真正看到的问题是,一旦我们开始向这些属性添加更多注解,事情开始变得丑陋我倾向于不在Ceylon编译器的早期版本中包含此功能,仅仅是因为我知道一旦我们都厌倦了编写像这样的代码,它很容易添加
shared Name name = name;