阅读芭蕾舞女演员的例子时,我偶然发现了这里的例子 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
可以在其他编译时结构中使用。