簡體   English   中英

Ballerina 中的 final 和 const 有什么區別?

[英]What is the difference between final and const in Ballerina?

閱讀 Ballerina 上的示例時,我偶然發現了示例https://ballerina.io/learn/by-example/variables.html ,它具有以下代碼:

public const int COUNT = 1;

final int status = 1;

其中第一行僅描述為

聲明一個public編譯時常量

第二個是:

聲明一個最終變量。 final變量的值是只讀的。 一旦將值分配給最終變量,它就變得不可變。 function 調用的所有參數都是隱式最終的。

但這引出了一個問題:final 和 const 有什么區別?

答案隱藏在另一個示例中,在列表后面很多: Const 和 final

final變量和常量的區別在於final變量的值可以在運行時初始化。 但是,常量必須在編譯時初始化。

意思是

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 不允許的 function (即在運行時)設置值。 目前在這兩種情況下都需要設置一個聲明變量的值,但在未來的版本中(當錯誤修復時),定義可以在代碼的后面。

另一方面(感謝@dhananjaya 指出) const可用於其他編譯時構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM