目前看来它只允许数组类型描述符中的数组大小的编译时常量。 例如
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"
}
创建大小不是编译时常量的数组的最简单方法是什么?
如问题所示,在 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"]
}