没有参数的scala uanapply
scala uanpply without parameter
我是一名在韩国学习Scala的学生。我正在学习模式匹配和不应用方法。我感到困惑的是 Emergency 对象在 unapply 方法中有一个参数。不把参数放在match块里,不知道是什么原因
object Solution {
def main(args: Array[String]) {
val number1 = "010-123-1234"
val number2 = "119"
val number3 = "포도먹은 돼지"
val numberList = List(number1, number2, number3)
for (number <- numberList) {
number match {
case Emergency() => println("긴급전화다")
case Normal(number) => println("일반 전화다" + number)
case _ => println("판단할 수 없습니다.")
}
}
}
}
object Emergency {
def unapply(number: String): Boolean = {
if (number.length == 3 && number.forall(_.isDigit)) true
else false
}
}
object Normal {
def unapply(number: String): Option[Int] = {
try {
Some(number.replaceAll("-", "").toInt)
} catch {
case _: Throwable => None
}
}
}
请注意 return 到 unapply
方法的类型不同。
Normal.unapply
return 一个 Option
。当你做case Normal(foo)
时,unapply
被调用,并且,如果它returns Some(number)
,匹配成功,并且number
被赋值给局部变量foo
,如果是 returns None
,匹配失败。
Emergency.unapply
returns a Boolean
, 所以 case Emergency()
如果 returns true
则成功,否则失败,但是有如果成功,则没有要分配的结果,因此,没有 "parameter".
unapply中的参数是你匹配的对象。
在这种情况下,number
字符串变量被传递给 Emergency.unapply
、Normal.unapply
等
这个link很好地解释了事情:
https://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html
我是一名在韩国学习Scala的学生。我正在学习模式匹配和不应用方法。我感到困惑的是 Emergency 对象在 unapply 方法中有一个参数。不把参数放在match块里,不知道是什么原因
object Solution {
def main(args: Array[String]) {
val number1 = "010-123-1234"
val number2 = "119"
val number3 = "포도먹은 돼지"
val numberList = List(number1, number2, number3)
for (number <- numberList) {
number match {
case Emergency() => println("긴급전화다")
case Normal(number) => println("일반 전화다" + number)
case _ => println("판단할 수 없습니다.")
}
}
}
}
object Emergency {
def unapply(number: String): Boolean = {
if (number.length == 3 && number.forall(_.isDigit)) true
else false
}
}
object Normal {
def unapply(number: String): Option[Int] = {
try {
Some(number.replaceAll("-", "").toInt)
} catch {
case _: Throwable => None
}
}
}
请注意 return 到 unapply
方法的类型不同。
Normal.unapply
return 一个 Option
。当你做case Normal(foo)
时,unapply
被调用,并且,如果它returns Some(number)
,匹配成功,并且number
被赋值给局部变量foo
,如果是 returns None
,匹配失败。
Emergency.unapply
returns a Boolean
, 所以 case Emergency()
如果 returns true
则成功,否则失败,但是有如果成功,则没有要分配的结果,因此,没有 "parameter".
unapply中的参数是你匹配的对象。
在这种情况下,number
字符串变量被传递给 Emergency.unapply
、Normal.unapply
等
这个link很好地解释了事情:
https://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html