理解Scala';s提取器-具有零变量和布尔结果的模式
目前我正在学习Scala提取器,并陷入以下困惑。我无法理解以下代码。在下面的模式匹配中,UpperCase()如何返回字符串,而unapply方法被设计为返回布尔值理解Scala';s提取器-具有零变量和布尔结果的模式,scala,pattern-matching,Scala,Pattern Matching,目前我正在学习Scala提取器,并陷入以下困惑。我无法理解以下代码。在下面的模式匹配中,UpperCase()如何返回字符串,而unapply方法被设计为返回布尔值 object UpperCase { def unapply(s: String): Boolean = s.toUpperCase == s } println(UpperCase.unapply("RAK")) //print boolean true or false. "RAK" match{
object UpperCase {
def unapply(s: String): Boolean = s.toUpperCase == s
}
println(UpperCase.unapply("RAK")) //print boolean true or false.
"RAK" match{
case status @ UpperCase() => println("yes - "+ status) //How status holds RAK not boolean value?
case _ => println("No")
}
您使用的是一个,它匹配所有值v
,对于该值x.unapply(v)
将生成true
。@
是一个变量,它将变量状态
绑定到模式匹配的值
在您的示例中,模式与字符串“RAK”匹配,该字符串绑定到变量
status
,这意味着,“status”实际上持有模式匹配的值;哪一个是“RAK”。谢谢你的简单解释。