如何在 Ballerina 中创建运行时动态大小的数组?

问题描述 投票:0回答:1

目前看来它只允许数组类型描述符中的数组大小的编译时常量。 例如

const ARR_SIZE = 2;

public function main() {
    int[] arr1 = []; // okay
    int[2] arr2 = []; // okay
    int[ARR_SIZE] arr3 = []; // okay
    int array_size = 4;
    // int[array_size] arr4 = []; // not okay, gives compilation error: "invalid reference expression 'array_size' as array size: expected a constant reference expression"
}

创建大小不是编译时常量的数组的最简单方法是什么?

arrays size dynamic-arrays ballerina
1个回答
0
投票

如问题所示,在 Ballerina Swan Lake 2201.7.2 中,数组类型描述符仅允许数组大小的编译时常量。因此,无法在运行时创建固定长度的数组。

您可以做的是在运行时创建一个可变长度数组。在运行时将数组扩展到特定长度的最简单、最快的方法是使用数组成员赋值语句(如果数组类型具有填充值)。

import ballerina/io;

public function main() {
    int array_size = 4;
    int[] arr = [];
    arr[array_size - 1] = 1;
    io:println(arr); // [0,0,0,1]
}

否则我们必须将成员推送到数组中,直到获得所需的大小。

import ballerina/io;

public function main() {
    int array_size = 4;
    string:Char[] arr = [];
    // arr[array_size - 1] = "0"; // error: "array of length 0 cannot be expanded into array of length 4 without filler values"

    foreach int i in 0..<array_size {
        arr.push("0");
    }
    io:println(arr); // ["0","0","0","0"]
}
© www.soinside.com 2019 - 2024. All rights reserved.