在阅读关于芭蕾舞女演员的示例时,我偶然发现了https://v1-0.ballerina.io/learn/by-example/variables.html上的示例,该示例具有以下代码:
public const int COUNT = 1;
final int status = 1;
其中第一行仅用
描述声明一个公共常量
第二个是:
声明一个最终变量。
final
变量的值是只读的。将值分配给最终变量后,该值将变为不可变的。函数调用的所有参数都是隐式最终的。
但这导致了一个问题:final和const有什么区别?
答案 0 :(得分:2)
答案在另一个示例中被隐藏,该示例在列表的后面很多位置:https://v1-0.ballerina.io/learn/by-example/constants.html
最终变量和常量之间的区别在于,最终变量的值可以在运行时初始化。但是,常量必须在编译时初始化。
什么意思
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 currently doesn't work, but it should
foo = 32;
使用final
可以从const不设置的函数中(即在运行时)设置值。当前,在这两种情况下,都需要在声明变量的地方设置值,但是在将来的版本(修复了错误)中,可以在代码中稍后定义。
另一方面(感谢@dhananjaya指出)const
可用于其他编译时构造。