2017-03-17 14 views

답변

6

tailOption은 필요하지 않습니다. tail과 같은 기능을 원한다면. 빈 콜렉션에서 빈 콜렉션을 사용하면 drop(1)을 사용할 수 있습니다. 나는이 때 쌍의 목록 작성 우아하게 하늘의 콜렉션을 처리 할 때 내가 자주 사용 : 빈 수집 및 비어 있지 않은 하나에 Some(tail)None을 원하는 경우에

s zip s.drop(1) 

을, 당신은 사용할 수 있습니다

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

또는 (당신이 예외를 신경 쓰지 않는 경우는 조금 느려질 수있다, 던져 및 캡처 할) :

Try {s.tail}.toOption 

내가 거의 구약에 대한 합리적인 사용 사례를 상상할 수 없다 그래도 그녀의 선택권.

+0

그래서'def tailOption = drop (1) andThen 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 
관련 문제