无参数scala uanpply

无参数scala uanpply,scala,parameters,unapply,Scala,Parameters,Unapply,我是一名在韩国学习Scala的学生。我正在学习模式匹配和应用方法。我感到困惑的是,Emergency对象在unapply方法中有一个参数。当我没有将参数放入匹配块时,我不知道原因 object Solution { def main(args: Array[String]) { val number1 = "010-123-1234" val number2 = "119" val number3 = "포도먹은 돼지" val numberList =

我是一名在韩国学习Scala的学生。我正在学习模式匹配和应用方法。我感到困惑的是,Emergency对象在unapply方法中有一个参数。当我没有将参数放入匹配块时,我不知道原因

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
    }
  }
}
对象解决方案{
def main(参数:数组[字符串]){
val number1=“010-123-1234”
val number2=“119”
val编号3=”포도먹은 돼지"
val numberList=列表(编号1、编号2、编号3)
对于(数字println(“긴급전화다")
大小写正常(数字)=>println(“일반 전화다“+数字)
案例=>println(“판단할 수 없습니다.")
}
}
}
}
物体紧急情况{
def unapply(编号:字符串):布尔={
如果(number.length==3&&number.forall(u.isDigit))true
否则错误
}
}
对象法线{
取消应用def(编号:字符串):选项[Int]={
试一试{
部分(number.replaceAll(“-”,“).toInt)
}抓住{
案例:可丢弃=>无
}
}
}

请注意,to
unapply
方法的返回类型是不同的

Normal.unapply
返回一个
选项
。当执行
case Normal(foo)
时,调用
unapply
,如果它返回
Some(number)
,则匹配成功,
number
被分配给局部变量
foo
,如果它返回
None
,匹配失败


Emergency.unapply
返回一个
Boolean
,因此
case Emergency()
如果返回
true
,则成功,否则失败,但在成功的情况下没有可分配的结果,因此没有“参数”。

请注意,unapply方法的返回类型不同

Normal.unapply
返回一个
选项
。当执行
case Normal(foo)
时,调用
unapply
,如果它返回
Some(number)
,则匹配成功,
number
被分配给局部变量
foo
,如果它返回
None
,匹配失败


Emergency.unapply
返回一个
Boolean
,因此
case Emergency()
如果返回
true
,则会成功,否则会失败,但如果成功,则没有可分配的结果,因此没有“参数”。

unapply中的参数就是您要匹配的对象

在这种情况下,
number
字符串变量被传递到
Emergency.unapply
Normal.unapply

这个链接很好地解释了这一点:


unapply中的参数是要匹配的对象

在这种情况下,
number
字符串变量被传递到
Emergency.unapply
Normal.unapply

这个链接很好地解释了这一点:


我理解。我困惑的是紧急对象在unapply方法中有一个参数。但是为什么没有参数它会工作上面的答案解释了这一点。我理解。我困惑的是紧急对象在unapply方法中有一个参数。但是为什么没有参数它会工作答案上面解释了这一点。对不起,我得到了正常部分,但“如果成功,则无需分配结果”意味着什么??这是否意味着如果我有返回值,我必须将参数放入??布尔值也是一个返回值。我是否认为它错了??
Normal(foo)
返回一个
Int
,分配给
foo
Emergency()
不需要参数:
true
与case子句匹配,
false
不匹配。对不起,我得到了正常部分,但“如果成功,则无需分配结果”“意味着??这是否意味着如果我有一个返回值,我必须将参数放入??布尔值也是一个返回值。我是否认为这是错误的???
Normal(foo)
返回一个
Int
,该值被分配给
foo
Emergency()
不需要参数:
true
与case子句匹配,
false
不匹配。