Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

You can write:

str match { case "foo" | "bar" => ... }

At first glance it looks like | could be an extractor object, however:

str match { case |("foo", "bar") => ... }

does not work. (And I can't see how that could be implemented anyway.)

So it is a magic built-in operator?

(I believe I have seen this question on SO before, but it's impossible to search for...)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.1k views
Welcome To Ask or Share your Answers For Others

1 Answer

| is not implemented in the library, it is interpreted by the Scala compiler. It builds a new pattern that is defined as the disjunction between two subpatterns that don't bind any variable (although the newly formed pattern can itself be bound; i.e., you can write stuff like

try { /*...*/ }
catch {
  case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
}

and e gets as type the most specific supertype of the listed alternatives).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...