给定以下函数:
(String, int)? getPair() {
return ('hello', 42);
}
字符串
我可以使用如下字段访问多个返回:
final pair = getPair();
if (pair != null) {
String word = pair.$1;
int number = pair.$2;
}
型
但是,我更喜欢使用某种模式匹配来解构这些值。这就是我所尝试的:
final (word, number) = getPair();
型
但这会导致以下错误:
类型'(String,int)的匹配值?'不可分配给所需的类型'(Object?,Object?)’。尝试更改模式的所需类型或匹配的值类型。
我该如何更改模式或匹配值的所需类型?
相关参考文献:
3条答案
按热度按时间xpcnnkqh1#
您可以对结果进行模式匹配并提取:
字符串
如果您需要有限范围的var,可以使用if-case:
型
uyto3xhc2#
您可以在
null
-check之后进行解构,就像您手动使用$1
和$2
一样:字符串
你可以使用not-
null
assert 作为声明模式的一部分:型
如果值为
null
,则会抛出。不能将
null
check 作为声明的一部分,因为声明模式必须是不可反驳的,而检查可能会失败。你可以使用
?
将null检查作为可反驳模式检查的一部分:型
或
型
由于您还匹配以下解构中的类型,因此可以删除
?
。或者,如果您还希望绑定
pair
,则可以将这两种方法结合起来:型
uklbhaso3#
好吧,这比我想要的要详细一点,但这是一个部分解决方案:
字符串
如果有更直接的方法,我欢迎另一个答案。