Ballerina中如何获取联合类型变量的实际类型?
在Ballerina中实现指定的类型匹配与错误抛出
当然可以实现你想要的逻辑!Ballerina的模式匹配和类型处理能力完全支持这种场景,下面是对应的实现代码:
function foo() returns int|string|float|boolean|map|() { // 这里可以根据需求实现foo函数的返回逻辑,比如返回不同类型的值 return "sample string"; } function getIntValue() returns int { var value = foo(); match value { int intVal => return intVal; string|float|boolean|map|() x => { error err = error(message = string`Expected an 'int', but found '${typeof(x)}'`); throw err; } } } // 测试示例 public function main() { try { int val = getIntValue(); io:println(val); } catch error err { io:println(err.message); } }
关键细节说明:
- 模式匹配逻辑:Ballerina的
match表达式可以精准匹配联合类型中的具体类型,int intVal会直接捕获int类型的返回值并绑定到intVal变量,直接返回即可。 - 动态类型获取:使用
typeof(x)函数可以获取变量x的实际运行时类型,完美满足你在错误消息中显示<type_of_x>的需求。 - 错误构造与抛出:通过
error构造函数创建包含自定义消息的错误对象,再用throw抛出;后续可以通过try-catch块捕获并处理这个错误。
当foo()返回非int类型的值时(比如示例中的字符串),运行后会输出:Expected an 'int', but found 'string',完全符合你的预期。
内容的提问来源于stack exchange,提问作者Pubudu
相关产品推荐
相关产品推荐

