作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道您可以像这样匹配一组类型,而无需使用 isInstanceOf
:
x match {
case fooBar @ (_: Foo | _: Bar) => ???
}
但是,除了一组类型之外,有没有办法匹配任何东西?例如,匹配任何x
,不是 Foo
或 Bar
,而不使用 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/
我是一名优秀的程序员,十分优秀!