芭蕾舞女演员中的final和const有什么区别?

时间:2019-09-24 10:36:03

标签: ballerina

在阅读关于芭蕾舞女演员的示例时,我偶然发现了https://v1-0.ballerina.io/learn/by-example/variables.html上的示例,该示例具有以下代码:

public const int COUNT = 1;

final int status = 1;

其中第一行仅用

描述
  

声明一个公共常量

第二个是:

  

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

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

1 个答案:

答案 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可用于其他编译时构造。