gpt4 book ai didi

scala - 有没有办法在不使用 instanceOf 的情况下匹配除特定类型(或类型集)之外的所有内容?

转载 作者:行者123 更新时间:2023-12-04 02:00:13 27 4
gpt4 key购买 nike

我知道您可以像这样匹配一组类型,而无需使用 isInstanceOf:

x match {
case fooBar @ (_: Foo | _: Bar) => ???
}

但是,除了一组类型之外,有没有办法匹配任何东西?例如,匹配任何x不是 FooBar,而不使用 isInstanceOf?

最佳答案

嗯,你可以的

x match {
case fooBar @(_: Foo | _: Bar) => // do nothing
default => // do something
}

无论如何,使用 isInstanceOf 的唯一区别是语法,因为您仍然要执行运行时检查。

从功能的角度来看,组合 isInstanceOf/asInstanceOf 与类型匹配相同。

所以(如果你真的必须的话)我会选择

if (!(x.isInstanceOf[Foo] || x.isInstanceOf[Bar])) {
// do something
}

同样,它们没有实际区别,而且它们都是处理类型的一种相当老套的方式。除非您正在使用您无法控制的外部 API,否则我建议更改您的设计并避免在类型上进行匹配。

通常类型类会派上用场,但如果没有进一步的细节,就很难确定。

关于scala - 有没有办法在不使用 instanceOf 的情况下匹配除特定类型(或类型集)之外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com