Knu*_*daa 33 scala pattern-matching
你可以写:
str match { case "foo" | "bar" => ... }
Run Code Online (Sandbox Code Playgroud)
乍一看,它看起来|可能是一个提取器对象,但是:
str match { case |("foo", "bar") => ... }
Run Code Online (Sandbox Code Playgroud)
不起作用.(我无法看到无论如何都可以实现.)
那么它是一个神奇的内置运营商?
(我相信我之前已经在SO上看过这个问题了,但是找不到......)
Jea*_*let 39
|未在库中实现,它由Scala编译器解释.它构建了一个新模式,定义为两个不绑定任何变量的子模式之间的分离(尽管新形成的模式本身可以绑定;即,您可以编写类似的东西
try { /*...*/ }
catch {
case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
}
Run Code Online (Sandbox Code Playgroud)
并e获得所列替代品中最具体的超类型的类型.