锡兰的属性(getter 和 setter)
Properties (getters and setters) in Ceylon
如何在 Ceylon 中定义 属性?我知道我可以编写 getName
和 setName
函数来获取和设置支持变量:
class Circle(shared variable Float radius) {
shared Float getArea() {
return pi * radius ^ 2;
}
shared void setArea(Float area) {
radius = sqrt(area / pi);
}
}
value circle = Circle(4.0);
circle.setArea(10.0);
print(circle.getArea());
但我希望能够提供对 属性:
的类似属性的访问
value circle = Circle(4.0);
circle.area = 10.0;
print(circle.area);
我如何在锡兰执行此操作?
Getters 的声明类似于定义没有参数列表的函数。 getter 函数体的行为就像一个普通函数,并且必须 return 属性.
的计算值
variable String local_var = "Hello world!";
// Getter
String name1 {
return local_var;
}
// Also getter, using functional syntax for body
String name2 => local_var;
Setters 是使用 assign
关键字声明的。 setter 主体然后表现得像一个 void 函数,执行任何适当的局部环境变化,并且不能 return 一个值。可以通过 属性.
的名称在正文中引用正在分配的传入值
// Setter
assign name1 {
local_var = name1; // name1 here is value being assigned
}
// Also setter, using modified functional syntax
assign name2 => local_var = name2;
与大多数编程语言不同,属性可以是包的顶级成员,而不仅仅是 class:
的成员
class Circle(shared variable Float radius) {
// Class-level getter
shared Float area {
return pi * radius ^ 2;
}
// Class-level setter
assign area {
radius = sqrt(area / pi);
}
}
Circle window = Circle(1.0);
// Top-level getter
Circle outer_window => Circle(window.radius * 2);
// Top-level setter
assign outer_window => window.radius = outer_window.radius / 2;
附加评论:在 Java 后端,Ceylon getter 和 setter 编译为 Java getter 和 setter(使用标准 getFoo
/setFoo
名称,或 isFoo
用于 Boolean
属性)。强烈建议不要定义名为 getter 和 setter 的常规函数,例如问题中的 getArea
和 setArea
,如果您确实定义了它们,它们的支持函数实际上将被称为不同的东西(例如$getArea
) 以避免与编译器自动生成的 getter 和 setter 发生冲突。
如何在 Ceylon 中定义 属性?我知道我可以编写 getName
和 setName
函数来获取和设置支持变量:
class Circle(shared variable Float radius) {
shared Float getArea() {
return pi * radius ^ 2;
}
shared void setArea(Float area) {
radius = sqrt(area / pi);
}
}
value circle = Circle(4.0);
circle.setArea(10.0);
print(circle.getArea());
但我希望能够提供对 属性:
的类似属性的访问value circle = Circle(4.0);
circle.area = 10.0;
print(circle.area);
我如何在锡兰执行此操作?
Getters 的声明类似于定义没有参数列表的函数。 getter 函数体的行为就像一个普通函数,并且必须 return 属性.
的计算值variable String local_var = "Hello world!";
// Getter
String name1 {
return local_var;
}
// Also getter, using functional syntax for body
String name2 => local_var;
Setters 是使用 assign
关键字声明的。 setter 主体然后表现得像一个 void 函数,执行任何适当的局部环境变化,并且不能 return 一个值。可以通过 属性.
// Setter
assign name1 {
local_var = name1; // name1 here is value being assigned
}
// Also setter, using modified functional syntax
assign name2 => local_var = name2;
与大多数编程语言不同,属性可以是包的顶级成员,而不仅仅是 class:
的成员class Circle(shared variable Float radius) {
// Class-level getter
shared Float area {
return pi * radius ^ 2;
}
// Class-level setter
assign area {
radius = sqrt(area / pi);
}
}
Circle window = Circle(1.0);
// Top-level getter
Circle outer_window => Circle(window.radius * 2);
// Top-level setter
assign outer_window => window.radius = outer_window.radius / 2;
附加评论:在 Java 后端,Ceylon getter 和 setter 编译为 Java getter 和 setter(使用标准 getFoo
/setFoo
名称,或 isFoo
用于 Boolean
属性)。强烈建议不要定义名为 getter 和 setter 的常规函数,例如问题中的 getArea
和 setArea
,如果您确实定义了它们,它们的支持函数实际上将被称为不同的东西(例如$getArea
) 以避免与编译器自动生成的 getter 和 setter 发生冲突。