저는 스칼라를 처음 접했고 컬렉션에서 패턴 매칭을 배우면서 마지막 요소 하나를 찾기 위해 일반적으로 간단한 로직을 작성했습니다. 내 첫 시도는 다음과 같습니다.스칼라 목록에서 끝에서 두 번째 요소 찾기
@scala.concurrent.tailrec
def penultimate[A](elems: List[A]) = elems match {
case Nil => None
case first :: second :: Nil => Some(first)
case head :: tail => penultimate(tail)
}
이 방법으로 충분합니까? 꼬리 재귀에 대해 읽었고 내 메서드를 꼬리 재귀 적으로 만들었습니다!
그러나 다음과 같은 경우에 실패하고 내가 기대하는 곳 일부는 (1) :
penultimate[Int](List(1)) // This should give me Some(1)
은 내가 할 수있는 것이 더 좋은 일이 있나요? 스칼라 컬렉션 라이브러리에서 reverse 메서드를 사용하여 이것을 하나의 라이너로 만들 수 있지만 사용하지 않으려 고했습니다.
더 좋은 방법이 있습니까?
당신이 말하는 말이 정확하지 않습니다. 첫째, 코드가 컴파일되지 않습니다. 둘째 : 컴파일 오류를 고칠 때'두 번째 (List (1))'는'None'을 반환합니다. –
혼란을 드려 죄송합니다. 나는 나의 포스트를 편집했다! –
이제 혼란스러워합니다. 왜 당신은 '어떤 (1)'을 기대합니까? –