복붙노트

[SCALA] 서열로서 문자열 [숯] 패턴 매칭

SCALA

서열로서 문자열 [숯] 패턴 매칭

스칼라 이는 서열 [샤아]로 처리하여 문자열의 개별 문자에 기초하여 패턴을 공식화 할 수있다.

이 기능의 예는 스칼라의 투어에서 언급

이 예제 코드가 사용됩니다

object RegExpTest1 extends Application {
 def containsScala(x: String): Boolean = {
   val z: Seq[Char] = x
   z match {
      case Seq('s','c','a','l','a', rest @ _*) =>
                println("rest is "+rest)
                true
      case Seq(_*) =>
                false
   }
 }

}

나는이 함께이 문제는 조각의 세 번째 줄입니다 :

val z: Seq[Char] = x

왜 이런 종류의 필요 캐스팅? 해서는 안 (패턴 매칭을 포함 할 것) 모든 상황에서 서열 [숯불]와 같은 문자열 동작합니다? 그러나,이 변환없이 코드가 작동하지 않습니다.

해결법

  1. ==============================

    1.100 %이 정확하지만 내 직감라고 확인하는 경우 그이 명시 적 캐스트없이 당신이하고자 원하는 것이 아니다 java.lang.String의,에 대한 패턴 일치는.

    100 %이 정확하지만 내 직감라고 확인하는 경우 그이 명시 적 캐스트없이 당신이하고자 원하는 것이 아니다 java.lang.String의,에 대한 패턴 일치는.

    명시 적 캐스트의 힘을 사용 Predef.stringWrapper 암시 적 변환에 스칼라 컴파일러; RichString 서열 [숯불]을 확장 같은 문자열이 문자의 순서 인 것처럼 따라서, 당신은 패턴 일치를 할 수 있습니다.

  2. ==============================

    2.질문과 코멘트에 계속 용어의 진짜 남용이있다. 이 코드에는 캐스트가 없으며, 특히 현실에 근거가 없다 "그러니까 기본적으로, 이것은 어떤 종류의 건전성이 저하, 자바 상호 운용성에 큰 양보입니다."

    질문과 코멘트에 계속 용어의 진짜 남용이있다. 이 코드에는 캐스트가 없으며, 특히 현실에 근거가 없다 "그러니까 기본적으로, 이것은 어떤 종류의 건전성이 저하, 자바 상호 운용성에 큰 양보입니다."

    이 같은 스칼라 캐스트 외모 : x.asInstanceOf [Y]. 브로 Z : 당신은 아는 것이 과제이다 서열 [샤아] = X

    서열 [샤아]에 문자열에서 암시 적 변환이 있기 때문에이 할당은 합법적이다. 나는이 캐스팅하지 않습니다, 다시 강조한다. 캐스트는 런타임에 실패 할 수 있습니다 임의의 주장이다. 암시 적 변환이 실패 할 수있는 방법은 없습니다.

    암시 적 유형 간의 변환, 원래의 질문에 대한 답변에 따라 문제는, 원래 값이 수표를 입력하지 않을 경우 암시 적 변환은 일어날 것입니다. 이 문자열에 맞게 완벽하게 합법적이기 때문에, 변환이되지 않습니다, 경기는 실패합니다.

  3. ==============================

    3.나는 andri가 말했다 에코 모든 것을거야. 상호 운용성을 위해, 스칼라 문자열 java.lang.Strings입니다. PREDEF에서, 서열 [숯] 구현 RichString에 열로부터 암시 적 변환이있다.

    나는 andri가 말했다 에코 모든 것을거야. 상호 운용성을 위해, 스칼라 문자열 java.lang.Strings입니다. PREDEF에서, 서열 [숯] 구현 RichString에 열로부터 암시 적 변환이있다.

    서열 [숯] 보유 중간 발 z의 필요없이, 패턴 매치를 부호화하는 아마도 더 좋은 방법 :

    def containsScala(x: String): Boolean = {
      (x: Seq[Char]) match {
        ...
      }
    }
    
  4. from https://stackoverflow.com/questions/740563/pattern-matching-a-string-as-seqchar by cc-by-sa and MIT license