当模式匹配列表时,给定空列表时返回空列表似乎很常见。我们可以将空列表与Nil
或List()
匹配,但我们可以返回空Nil
,List()
或返回给定的列表参数本身。
这里的约定是什么? 你什么时候选择一种方法而不是另一种呢?
示例:
def givenEmptyNumsReturnsNil(nums: List[Int]): List[Int] = nums match {
case List() => Nil
case x :: xs => ???
}
def givenEmptyNumsReturnsEmptyList(nums: List[Int]): List[Int] = nums match {
case List() => List()
case x :: xs => ???
}
def givenEmptyNumsReturnsNums(nums: List[Int]): List[Int] = nums match {
case List() => nums
case x :: xs => ???
}
答案 0 :(得分:1)
我是scala初学者,并且不了解任何有关它的现有惯例。我的事情:
-
def givenEmptyNumsReturnsNil(nums: List[Int]): List[Int] = nums match {
case Nil => Nil
case x :: xs => ???
}
但是Nil和List()是一样的。
答案 1 :(得分:1)
为了更好的选择,只需弄清楚里面的内容:
案例 N1 :
def givenEmptyNumsReturnsEmptyList(nums: List[Int]): List[Int] = nums match {
case List() => List()
case x :: xs => ???
}
在调用对象unaplay
的{{1}}方法之后,将从对象List
调用apply
方法。
案例 N2 :
List
将在与对象def givenEmptyNumsReturnsNil(nums: List[Int]): List[Int] = nums match {
case Nil => Nil
case x :: xs => ???
}
匹配之前比较值,并返回对象Nil
如果选择,我更喜欢 N2 ,因为它有点优化。