为什么scala模式匹配不支持`s" $ var"`?

时间:2014-07-07 07:12:56

标签: scala pattern-matching

Scala代码:

object Path {
  def unapply(s:String):Some[String] = Some(s)
}

val s = "hello world"

val h = "hello"
s match {
  case Path(s"$h world") => println("Get hello")
  case _ => println("???")
}

我尝试在模式匹配中使用s"$var",但它无法编译:

 <console> error: method s is not a case class, nor does it have 
 an unapply/unapplySeq member
            case Path(s"$h world") => println("Get hello")

为什么scala不能编译它?

如果我把它放在if条款中:

s match {
  case Path(p) if p == s"$h world" => println("Get hello")
  case _ => println("???")
}

它运作良好。

为什么scala不能编译它?

1 个答案:

答案 0 :(得分:5)

  

为什么scala无法编译它?

它基本上是一个方法调用(参见http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.StringContext),模式中不允许进行方法调用(通常在那里没有意义)。

  

如果我把它放在if子句中:

     

它运作良好。

因为if采用表达式而不是模式。

你可以做的另一件事:

val A = s"$h world" // note upper-case

s match {
  case Path(A) => ...
}