복붙노트

[SCALA] 어떻게 스칼라 I 패턴 일치 배열은 무엇입니까?

SCALA

어떻게 스칼라 I 패턴 일치 배열은 무엇입니까?

다음과 같이 내 방법 정의는 본다

def processLine(tokens: Array[String]) = tokens match { // ...

내가 두 번째 문자열이 공백인지 여부를 알고 싶은 가정

case "" == tokens(1) => println("empty")

컴파일되지 않습니다. 어떻게이 일을 가야합니까?

해결법

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

    1.두 번째 요소는 빈 문자열이 있는지 여부를 확인하기 위해 배열 패턴 일치 시키려면, 다음을 수행 할 수 있습니다 :

    두 번째 요소는 빈 문자열이 있는지 여부를 확인하기 위해 배열 패턴 일치 시키려면, 다음을 수행 할 수 있습니다 :

    def processLine(tokens: Array[String]) = tokens match {
      case Array(_, "", _*) => "second is empty"
      case _ => "default"
    }
    

    _ * 것도 포함하지 않는 요소들의 임의의 개수 결합한다. 이것은 아마 더 잘 알려져리스트에 다음과 일치, 유사합니다 :

    def processLine(tokens: List[String]) = tokens match {
      case _ :: "" :: _ => "second is empty"
      case _ => "default"
    }
    
  2. ==============================

    2.패턴 매칭은 예를 들어 올바른 선택하지 않을 수 있습니다. 당신은 간단하게 할 수 있습니다 :

    패턴 매칭은 예를 들어 올바른 선택하지 않을 수 있습니다. 당신은 간단하게 할 수 있습니다 :

    if( tokens(1) == "" ) {
      println("empty")
    }
    

    패턴 매칭과 같은 경우에 더 적합합니다 :

    for( t <- tokens ) t match {
       case "" => println( "Empty" )
       case s => println( "Value: " + s )
    }
    

    이는 인쇄 각 토큰에 대한 뭔가.

    편집 : 당신이 빈 문자열 어떤 토큰이 존재하는지 확인하려는 경우, 당신은 또한 시도 할 수 있습니다 :

    if( tokens.exists( _ == "" ) ) {
      println("Found empty token")
    }
    
  3. ==============================

    3.어떤 추가 멋지다하면 같은 뭔가 _ * 일치 물건 별칭을 사용할 수 있다는 것입니다

    어떤 추가 멋지다하면 같은 뭔가 _ * 일치 물건 별칭을 사용할 수 있다는 것입니다

    val lines: List[String] = List("Alice Bob Carol", "Bob Carol", "Carol Diane Alice")
    
    lines foreach { line =>
      line split "\\s+" match {
        case Array(userName, friends@_*) => { /* Process user and his friends */ }
      }
    }
    
  4. ==============================

    4.case 문은 그런 식으로 작동하지 않습니다. 즉되어야합니다 :

    case 문은 그런 식으로 작동하지 않습니다. 즉되어야합니다 :

    case _ if "" == tokens(1) => println("empty")
    
  5. from https://stackoverflow.com/questions/6647166/how-do-i-pattern-match-arrays-in-scala by cc-by-sa and MIT license