任何约定"给定一个空列表返回一个空列表"匹配模式时?

时间:2014-06-14 07:36:38

标签: scala pattern-matching convention

当模式匹配列表时,给定空列表时返回空列表似乎很常见。我们可以将空列表与NilList()匹配,但我们可以返回空NilList()或返回给定的列表参数本身。

这里的约定是什么? 你什么时候选择一种方法而不是另一种呢?

示例:

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 => ???
}

2 个答案:

答案 0 :(得分:1)

我是scala初学者,并且不了解任何有关它的现有惯例。我的事情:

  • 最后一个不直观
  • 我更喜欢我匹配的回报。如果我有案例List(),那么我返回List()。
  • 你也可以匹配Nil:

-

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 ,因为它有点优化。