В чем разница между final и const у балерины? - PullRequest
1 голос
/ 24 сентября 2019

Читая примеры на балерине, я наткнулся на пример здесь https://v1 -0.ballerina.io / learn / by-example / variables.html , который имеет следующий код:

public const int COUNT = 1;

final int status = 1;

, где первая строка описывается только с помощью

Объявите открытую константу

, а вторая:

Объявитеконечная переменная.Значение переменной final доступно только для чтения.Как только значение присваивается конечной переменной, оно становится неизменным.Все параметры вызова функции неявно являются окончательными.

Но это приводит к вопросу: в чем разница между final и const?

1 Ответ

0 голосов
/ 24 сентября 2019

Ответ скрыт в другом примере, намного позже в списке: 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 может использоваться в других конструкциях времени компиляции.

...