你可以寫:| |如何| (管道)在模式匹配工作?
str match { case "foo" | "bar" => ... }
在它看起來像|
乍一看可能是提取物,但是:
str match { case |("foo", "bar") => ... }
不起作用。 (而且我也看不出如何實現這一點。)
那麼它是一個神奇的內置運算符?
(我相信我此之前看到的這個問題,但它無法搜索...)
你可以寫:| |如何| (管道)在模式匹配工作?
str match { case "foo" | "bar" => ... }
在它看起來像|
乍一看可能是提取物,但是:
str match { case |("foo", "bar") => ... }
不起作用。 (而且我也看不出如何實現這一點。)
那麼它是一個神奇的內置運算符?
(我相信我此之前看到的這個問題,但它無法搜索...)
是管道(|
)是內置的模式匹配(請參閱the scala language reference)。模式匹配部分(第8節)在第8.1.11節中定義了所謂的模式替代方案。定義如下:
模式替代p1 | ... | pn 由多個替代 模式pi組成。所有可選模式 都使用該模式的預期 類型進行了類型檢查。它們可能不會綁定 變量,而不是通配符。該 替代模式的值v 如果至少一個及其替代 匹配訴
所以,是的,管道是相匹配的內置也就是上下文模式匹配敏感。
|
沒有在庫中實現,它是由Scala編譯器解釋。它建立一個被定義爲沒有任何綁定變量(雖然新形成的圖案本身可以綁定2子模式之間的分離的新格局,即你可以寫這樣的東西
try { /*...*/ }
catch {
case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
}
和e
得到的鍵入列出的替代品中最具體的超類型)。
這裏是[示例](http://stackoverflow.com/questions/6384073/catching-multiple-exceptions-at-on-ce-scala/6385333#6385333)。 – agilesteel