提问人:Nadeeshan Dissanayake 提问时间:9/20/2023 更新时间:9/21/2023 访问量:50
如何在Ballerina中在运行时创建具有动态大小的数组?
How to create an array with dynamic size at runtime in Ballerina?
问:
目前似乎只允许数组类型描述符中数组大小的编译时常量。 例如
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"
}
创建大小不是编译时常量的数组的最简单方法是什么?
答:
0赞
Nadeeshan Dissanayake
9/20/2023
#1
从问题中可以看出,数组类型描述符只允许数组大小的编译时常量。因此,无法创建仅在运行时才知道大小的固定长度数组。
您可以做的是创建一个可变长度数组并在运行时更改其长度。如果数组类型具有填充值,则在运行时将数组扩展到特定长度的最简单、最快的方法是使用数组成员赋值语句,也可以使用该函数。array:setLength
import ballerina/io;
import ballerina/lang.array;
public function main() {
int array_size = 4;
int[] arr = [];
arr[array_size - 1] = 1;
io:println(arr); // [0,0,0,1]
array:setLength(arr, array_size + 3);
io:println(arr); // [0,0,0,1,0,0,0]
arr.setLength(array_size - 1);
io:println(arr); // [0,0,0]
}
否则,我们必须将成员推送到数组,直到获得所需的大小。
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"]
}
评论
0赞
Sameera Jayasoma
9/20/2023
我认为我们还需要回答如何确保数组不会超过一定大小。
评论