为什么scala中不允许这种匹配?
我必须使用scala查找元素是否在列表中,并且只允许使用递归。为什么下面的代码不起作用,因为match语句对我来说似乎是正确的。我的IDE在所有三个case语句上都给了我一个错误,它说type,mistmatch,boolean required为什么scala中不允许这种匹配?,scala,Scala,我必须使用scala查找元素是否在列表中,并且只允许使用递归。为什么下面的代码不起作用,因为match语句对我来说似乎是正确的。我的IDE在所有三个case语句上都给了我一个错误,它说type,mistmatch,boolean required def isInN(x: Int, l: List[Int]): Boolean = (l,l.head) match { case Nil,_ => false case _,x => true case _,_ =>
def isInN(x: Int, l: List[Int]): Boolean = (l,l.head) match {
case Nil,_ => false
case _,x => true
case _,_ => isInN (x,l.tail)
}
您正在匹配一个元组,因此需要使用适当的元组提取器。i、 e.只需添加括号:
def isInN(x: Int, l: List[Int]): Boolean = (l, l.head) match {
case (Nil, _) => false
case (_, x) => true
case (_, _) => isInN (x, l.tail)
}
这可以编译,但不会像您希望的那样工作。l、 如果列表为空,head将抛出异常。而比赛中的x会急切地匹配任何东西,所以最后一种情况永远无法实现。要与标识符匹配,需要在其周围加上反勾号,否则它将只是一个占位符匹配器
要在不调用l.head的情况下使用类似的模式匹配,可以在列表本身上进行模式匹配:
尽管这一切都被标准集合库中的包含所压倒:
scala> List(1, 2, 3, 4).contains(2)
res5: Boolean = true
您正在匹配一个元组,因此需要使用适当的元组提取器。i、 e.只需添加括号:
def isInN(x: Int, l: List[Int]): Boolean = (l, l.head) match {
case (Nil, _) => false
case (_, x) => true
case (_, _) => isInN (x, l.tail)
}
这可以编译,但不会像您希望的那样工作。l、 如果列表为空,head将抛出异常。而比赛中的x会急切地匹配任何东西,所以最后一种情况永远无法实现。要与标识符匹配,需要在其周围加上反勾号,否则它将只是一个占位符匹配器
要在不调用l.head的情况下使用类似的模式匹配,可以在列表本身上进行模式匹配:
尽管这一切都被标准集合库中的包含所压倒:
scala> List(1, 2, 3, 4).contains(2)
res5: Boolean = true
你应该解释一下你添加的反引号x@Dimitri反引号存在,因此scalac将其视为作为参数列出的x,而不是作为新变量。您应该解释添加的反引号x@Dimitri反引号存在,因此scalac将其视为作为参数列出的x,而不是作为一个新的变量。