芭蕾舞女演员的决赛和常量有什么区别?



阅读芭蕾舞女演员的例子时,我偶然发现了这里的例子 https://ballerina.io/learn/by-example/variables.html 它有以下代码:

public const int COUNT = 1;
final int status = 1;

其中第一行仅用

声明public编译时常量

第二个是:

声明一个最终变量。final变量的值是只读的。一旦将值分配给最终变量,它就变得不可变。函数调用的所有参数都是隐式的最终参数。

但这引出了一个问题:final和const有什么区别?

答案隐藏在另一个例子中,在列表的后面很多: 常量和最终

最终变量

和常量之间的区别在于,最终变量的值可以在运行时初始化。但是,常量必须在编译时初始化。

这意味着

function findFoo() returns int {
return 42;
}
public function main() {
// This works
final int foo = findFoo();
}

然而:

function findFoo() returns int {
// this is not allowed
return 42;
}
public function main() {
const int foo = findFoo();
}

以前语言实现中有一个错误(https://github.com/ballerina-platform/ballerina-lang/issues/15044(,现在已经修复:

int foo;
// this previously didn't work, but now does
foo = 32;

也就是说,使用final允许从函数(即在运行时(设置值,而 const 没有。目前,在这两种情况下,都需要在声明变量的位置设置值,但是在将来的版本中(当错误修复时(,定义可以在代码的后面

。另一方面(感谢@dhananjaya指出这一点(,const可以在其他编译时结构中使用。

最新更新