在Ballerina中用filter过滤可选类型数组有效值时编译报错,如何解决?
在Ballerina中用filter处理可选类型数组的问题
你的编译错误源于类型不匹配:filter方法返回的数组类型和原数组一致(int?[]),但你试图将其赋值给int[]类型的变量,编译器无法自动完成这个类型转换。
问题原因
Ballerina的filter函数不会改变数组的基础类型——即使你过滤掉了所有()(空值),它返回的仍然是int?[]类型。而foreach写法中,你是将确认类型的元素逐个添加到int[]数组,所以类型天然兼容。
解决方法
方法1:显式类型转换
在filter结果后添加as int[]类型断言,明确告诉编译器过滤后的数组元素均为int类型:
int?[] input = [1, 2, (), 3, 4, ()]; int[] output = input.filter(i => i is int) as int[];
方法2:使用查询表达式(更简洁)
Ballerina的查询表达式可以自动推断结果类型,无需手动转换:
int?[] input = [1, 2, (), 3, 4, ()]; int[] output = from int? i in input where i is int select i;
验证说明
两种方法最终都会得到正确结果output = [1,2,3,4]且编译通过。第一种适合简单场景,第二种的声明式写法可读性更强。
内容的提问来源于stack exchange,提问作者Azeem Muzammil
相关产品推荐
相关产品推荐

