在 ML 中,可以为匹配模式的每个元素指定名称:
fun findPair n nil = NONE
| findPair n (head as (n1, _))::rest =
if n = n1 then (SOME head) else (findPair n rest)
在这段代码中,我为列表的第一对定义了一个别名并匹配这对的内容。Scala中是否有等效的构造?
在 ML 中,可以为匹配模式的每个元素指定名称:
fun findPair n nil = NONE
| findPair n (head as (n1, _))::rest =
if n = n1 then (SOME head) else (findPair n rest)
在这段代码中,我为列表的第一对定义了一个别名并匹配这对的内容。Scala中是否有等效的构造?
您可以使用符号进行变量绑定,例如:@
scala> val wholeList @ List(x, _*) = List(1,2,3)
wholeList: List[Int] = List(1, 2, 3)
x: Int = 1
我相信您稍后会得到更完整的答案,因为我不确定如何像您的示例一样递归地编写它,但也许这种变化对您有用:
scala> val pairs = List((1, "a"), (2, "b"), (3, "c"))
pairs: List[(Int, String)] = List((1,a), (2,b), (3,c))
scala> val n = 2
n: Int = 2
scala> pairs find {e => e._1 == n}
res0: Option[(Int, String)] = Some((2,b))
好的,下次尝试直接翻译。这个怎么样?
scala> def findPair[A, B](n: A, p: List[Tuple2[A, B]]): Option[Tuple2[A, B]] = p match {
| case Nil => None
| case head::rest if head._1 == n => Some(head)
| case _::rest => findPair(n, rest)
| }
findPair: [A, B](n: A, p: List[(A, B)])Option[(A, B)]