편집 : 이것은 오래 오래 전부터 스칼라 2.8에서 수정 된 버그 이후빈 문자열이 Seq.empty와 일치하지 않는 이유는 무엇입니까?
질문 Pattern matching a String as Seq[Char] 주위에 몇 가지 실험을하는 동안, 나는 또 다른 이상한 일치하는 현상을 가로 질러했다. ""
가 제대로 "Empty"
산출 빈 문자열에
def %%&#(input: String) : String = {
val uha : Seq[Char] = input
uha match {
case Seq() => "Empty"
case Seq(first @ _, 'o', 'o') => "Bar"
case _ => "Oh"
}
}
호출 입력 : 문자의 순서로 문자열을 처리하는 다음 코드를 살펴 보자. 내가
case Seq.empty => "Empty"
로 첫 경기 절을 다시 작성하는 경우
그러나 ""
의 매칭은 실패하고 대신 기본 절을 일치합니다.
스칼라 라이브러리 소스 코드 (이상적인 세상에서해야 할 일이 아닙니다 .-))을 걷는 중 Seq()
과 Seq.empty
은 모두 RandomAccessSeq.empty
이됩니다. 분명히, Seq()
만 빈 문자열과 일치하기 때문에 위에서 설명한 현상과 일치하지 않습니다.
업데이트 : 몇 가지 더 실험시이 문제는 다음에 좁혀 수 있습니다
val list = List()
>>> list2: List[Nothing] = List()
val emptySeq = Seq.empty
list == emptySeq
>>> res1: Boolean = false
이 기본적으로 빈 Seq
가 자동으로 동일 Seq.empty
하지 않는 것을 의미한다. 그래서 상수와 일치 할 때 (starblue가 제안한 것과 같이 추출기를 사용하는 것과는 대조적으로)이 불평등은 실패한 일치를 유도합니다. String
을 시퀀스로 해석 할 때도 마찬가지입니다.
분명히 스칼라 2.8에서 해결 될 것입니다. 기대하고 있습니다. –
버그가 수정되었으므로 만료되었지만 (이미 수 년 전) 만료되었습니다. 검색 결과에 나타나지 않도록 이들을 넣는 Stackoverflow 정책은 무엇입니까? – akauppi
스칼라 <2.8 만 적용됩니다 (코멘트에 있지만 우리는 거기서 읽지 않습니다). Meta는 s.a와 관련된 문제에 대해 공개 토론을하고 있습니다. this : http://meta.stackoverflow.com/questions/252520/mark-questions-or-answers-as-out-of-date – akauppi