2014-07-07 2 views
1

스칼라 코드 :

object Path { 
    def unapply(s:String):Some[String] = Some(s) 
} 

val s = "hello world" 

val h = "hello" 
s match { 
    case Path(s"$h world") => println("Get hello") 
    case _ => println("???") 
} 

나는 패턴 매칭에 s"$var"을 사용하려고하지만, 컴파일 할 수 없습니다

<console> error: method s is not a case class, nor does it have 
an unapply/unapplySeq member 
      case Path(s"$h world") => println("Get hello") 

스칼라 컴파일 할 수없는 이유는 무엇입니까? 그것은 잘 작동하고

s match { 
    case Path(p) if p == s"$h world" => println("Get hello") 
    case _ => println("???") 
} 

: 나는 if 절에 넣을 경우

.

왜 스칼라에서는 컴파일 할 수 없습니까?

+0

당신이 [비디오]에 관심이있을 수 있습니다 (http://www.youtube.com/watch?v=tcQgNEFAVjI&t=41m5s); 그것은 다르지만 일을합니다. – eruve

답변

4

왜 스칼라에서는 컴파일 할 수 없습니까?

기본적으로 메서드 호출 (http://www.scala-lang.org/files/archive/nightly/docs/library/index.html#scala.StringContext 참조)이며 메서드 호출은 패턴에서 허용되지 않으며 일반적으로 거기에서 의미가 없습니다. 그것은 잘 작동하고

:

나는 절 경우를 넣어합니다.

if은 패턴이 아니기 때문에 표현식을 취하지 않기 때문에 패턴이 아닙니다.

또 다른 것은 당신이 할 수 있습니다 :

val A = s"$h world" // note upper-case 

s match { 
    case Path(A) => ... 
} 
관련 문제