2017-03-17 37 views

回答

6

不需要tailOption。如果你想要一个功能像tail一样行事。但在空集合上使用时返回空集合,则可以使用drop(1)。我经常用这个当我想妥善处理空集创建成对列表时:

s zip s.drop(1) 

如果您想对空收集和Some(tail)非空单None,你可以使用:

s.headOption.map(_ => s.tail) 

或者(如果你不介意的异常被抛出和捕获,这可能是有点慢):

Try {s.tail}.toOption 

我很难想象一个合理的使用情况旧约她的选择,虽然。

+0

so'def tailOption = drop(1)and Then headOption'或stg like that – jhegedus

0

我从来没有这样做过,这是一种有趣的为什么tailOption不属于标准库的一部分。我不知道为什么它不在那里,但我们可以通过捕获空列表尾部引发的错误来扩展功能。

def getOption[A](a: => A) = { 
    try{ Some(a) } 
    catch { case e: Exception => None } 
} 

getOption(List(1,2,3).tail) // Some(3) 
getOption(Nil.tail) // None 
相关问题