Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala |(pipe)在模式匹配中是如何工作的?_Scala_Pattern Matching - Fatal编程技术网

Scala |(pipe)在模式匹配中是如何工作的?

Scala |(pipe)在模式匹配中是如何工作的?,scala,pattern-matching,Scala,Pattern Matching,你可以写: str match { case "foo" | "bar" => ... } 乍一看,它可能是一个提取器对象,但是: str match { case |("foo", "bar") => ... } 不起作用。(我看不出这是如何实现的。) 所以它是一个神奇的内置操作符 (我相信我以前见过这个问题,但不可能搜索…)|不是在库中实现的,而是由Scala编译器解释的。它构建了一个新模式,该模式定义为两个子模式之间的分离,这两个子模式不绑定任何变量(尽管新形成的模式本身可

你可以写:

str match { case "foo" | "bar" => ... }
乍一看,它可能是一个提取器对象,但是:

str match { case |("foo", "bar") => ... }
不起作用。(我看不出这是如何实现的。)

所以它是一个神奇的内置操作符


(我相信我以前见过这个问题,但不可能搜索…)

|
不是在库中实现的,而是由Scala编译器解释的。它构建了一个新模式,该模式定义为两个子模式之间的分离,这两个子模式不绑定任何变量(尽管新形成的模式本身可以绑定;也就是说,您可以编写类似

try { /*...*/ }
catch {
  case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
}
e
获取所列备选方案中最具体的超类型作为类型)。

是的,管道(
|
)是一个内置的模式匹配(请参阅)。模式匹配部分(第8节)在第8.1.11节中定义了所谓的模式备选方案。定义是:

模式选择p1 |…|pn 由若干备选方案组成 模式pi。所有替代模式 是否使用预期的 图案的类型。他们可能没有约束力 通配符以外的变量。这个 替代模式与值v匹配 如果至少有一个选择,它的替代方案 匹配

是的,管道是一个内置的,对模式匹配是上下文敏感的。

下面是一个例子。