我可以获得联合类型变量的实际类型吗?
Can I get the actual type of a union type variable?
假设我有如下代码片段:
var value = foo(key);
match value {
int intVal => return intVal;
string|float|boolean|map|() x => {
error err = { message: "Expected an 'int', but found '<type_of_x>'" };
throw err;
}
}
foo()
return 一个联合:int|string|float|boolean|map|()
在上面的例子中,我希望 return 值是 'int' 类型,如果不是,我想打印一个错误,说 int
是预期的但找到了type_of_x
代替。这可以在 Ballerina 中完成吗?
你可以这样做
function main(string... args) {
var value = foo();
match value {
int val => {
io:println(val);
}
any x => {
error err = { message: "Expected an 'int', but found 'any'" };
throw err;
}
}
}
function foo() returns(any) {
any myInt = "hello";
return myInt;
}
现在您不能 typeof
并告诉类型,但是应该输入 foo() ,因此您应该知道可用的选项。因此你可以和他们比赛。
芭蕾舞语言目前没有类似于typeof
的运算符。但是,我可以建议一个明显的解决方法来扩展 Nuwan 的解决方案。
function bar () returns int {
var value = foo();
string typeName;
match value {
int intVal => return intVal;
string => typeName = "string";
float => typeName = "float";
boolean => typeName = "boolean";
map => typeName = "map";
() => typeName = "nil";
}
error err = { message: "Expected an 'int', but found '" + typeName + "'" };
throw err;
}
function foo() returns int|string|float|boolean|map|() {
return "ddd";
}
让我再补充一点——在 Ballerina 中给定的值可以是任意数量的类型。这是因为类型是一组值,没有什么可以阻止相同的值出现在多个集合中。
所以"typeof"的想法实在不行
假设我有如下代码片段:
var value = foo(key);
match value {
int intVal => return intVal;
string|float|boolean|map|() x => {
error err = { message: "Expected an 'int', but found '<type_of_x>'" };
throw err;
}
}
foo()
return 一个联合:int|string|float|boolean|map|()
在上面的例子中,我希望 return 值是 'int' 类型,如果不是,我想打印一个错误,说 int
是预期的但找到了type_of_x
代替。这可以在 Ballerina 中完成吗?
你可以这样做
function main(string... args) {
var value = foo();
match value {
int val => {
io:println(val);
}
any x => {
error err = { message: "Expected an 'int', but found 'any'" };
throw err;
}
}
}
function foo() returns(any) {
any myInt = "hello";
return myInt;
}
现在您不能 typeof
并告诉类型,但是应该输入 foo() ,因此您应该知道可用的选项。因此你可以和他们比赛。
芭蕾舞语言目前没有类似于typeof
的运算符。但是,我可以建议一个明显的解决方法来扩展 Nuwan 的解决方案。
function bar () returns int {
var value = foo();
string typeName;
match value {
int intVal => return intVal;
string => typeName = "string";
float => typeName = "float";
boolean => typeName = "boolean";
map => typeName = "map";
() => typeName = "nil";
}
error err = { message: "Expected an 'int', but found '" + typeName + "'" };
throw err;
}
function foo() returns int|string|float|boolean|map|() {
return "ddd";
}
让我再补充一点——在 Ballerina 中给定的值可以是任意数量的类型。这是因为类型是一组值,没有什么可以阻止相同的值出现在多个集合中。
所以"typeof"的想法实在不行