scala案例模式是一流的吗?

fre*_*low 8 scala pattern-matching first-class

是否可以将案例模式作为参数传递给其他函数?像这样的东西:

def foo(pattern: someMagicType) {
  x match {
    pattern => println("match")
  }
}

def bar() {
  foo(case List(a, b, c))
}
Run Code Online (Sandbox Code Playgroud)

0__*_*0__ 3

我认为金·斯特贝尔的第一个答案很接近你想要的。“模式匹配本身”在 Scala 中并不是孤立的实体。匹配可以定义为aFunction1PartialFunction

def foo[A, B](x: A)(pattern: PartialFunction[A, B]): Unit =
  if(pattern.isDefinedAt(x)) println("match")

def bar(list: List[String]): Unit =
  foo(list){ case List("a", "b", "c") => }
Run Code Online (Sandbox Code Playgroud)

测试:

bar(Nil)
bar(List("a", "b", "c"))
Run Code Online (Sandbox Code Playgroud)

或者使用组合物:

def foo[A, B](x: A)(pattern: PartialFunction[A, B]): Unit = {
  val y = pattern andThen { _ => println("match")}
  if (y.isDefinedAt(x)) y(x)
}
Run Code Online (Sandbox Code Playgroud)