当匹配的模式为Nil且我们想要返回Nil时,适当的返回值是多少?

aa8*_*a8y 7 scala

我是Scala的新手和一般的函数式编程.所以这是我的怀疑.

在具有模式匹配的函数中,当case Nil匹配时,我们想要返回Nil,我们应该返回Nil还是数据类型本身?例如,

def drop[A](l: List[A], n: Int): List[A] = {
    if (n <= 0) l
    else l match {
        case Nil => Nil
        case Cons(_, t) => drop(t, n - 1)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个n从单链表中删除第一个头元素的功能.在这里,对于第一种情况,我应该返回Nil(可能作为一种好的做法)还是应该返回l(因为那样我们就不必构造Nil对象了)?

sjr*_*jrd 8

Nil对象只有一个单例实例.当你写作时Nil,不要每次都创建一个新的,你只需使用唯一存在的.

通常最好写,Nil因为它更具可读性.至少那是我一直读写的内容.