我有一个简单的unapply检查整数小于10
object MatchLess {
def unapply(i: Int): Option[Int] = if ( i < 10 ) Some(i) else None
}
// so this prints
// 7 8 9 . . .
for ( i <- 7 to 12 ) i match {
case MatchLess(x) => print(x + " ") // line 8
case _ => print(". ")
}
Run Code Online (Sandbox Code Playgroud)
我对unapply语法有一个疑问:为什么在case第8行中,值x实际上在两侧都可见=>?我可以假设编译器隐式添加这样的赋值吗?
// ...
case /* val x = i */ MatchLess(x) => print(x + " ") // line 8
Run Code Online (Sandbox Code Playgroud)
当你写下case MatchLess(x) => ...意思如下:
x)被返回的值unapply这里i的Some(i)(ohterwise,该模式不匹配,去下面.所以在你的特定情况下,它x被绑定到相同的值i.但是如果代替Some(i)函数MatchLess.unapply返回其他东西(例如Some(42))x将被绑定42.