Fre*_*ind 3 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("???")
}
Run Code Online (Sandbox Code Playgroud)
我试图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")
Run Code Online (Sandbox Code Playgroud)
为什么scala无法编译呢?
如果我把它放在if条款中:
s match {
case Path(p) if p == s"$h world" => println("Get hello")
case _ => println("???")
}
Run Code Online (Sandbox Code Playgroud)
它运作良好.
为什么scala无法编译呢?
为什么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) => ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |