2016-09-02 9 views
0

나는 다음과 같은 방법으로 클래스를 가지고 :자리 표시자가 작동하지 않는 이유는 무엇입니까?

나는 _ 우리가 일부 특정 문자를 사용하지 않으려는 상황에서 사용될 수있다 생각
def message[A <: AnyRef](a: A) = a match { 
    case str: String => messages ++ str 
    case _: AnyRef => serializer.write(_) //compile error 
} 

. 하지만

def message[A <: AnyRef](a: A) = a match { 
    case str: String => messages ++ str 
    case a: AnyRef => serializer.write(a) 
} 

도 괜찮습니다.

_의 문제점은 무엇입니까? 메소드 매개 변수로서의 사용의 한계는 무엇입니까?

+1

https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala – dveim

답변

1

컴파일러에 _에 대한 가능한 값이 없으므로 serializer.write(_)에 오류가 발생합니다. 예를 들어, List(1, 2, 3) map (_ + 2)이라고 쓰면 List(1, 2, 3) map (x => x + 2)으로, 으로 확장 할 수 있습니다.x_으로 숨겨져있을 수 있습니다.

2

case _: AnyRef => serializer.write(_) 이러한 와일드 카드는 관련이 없습니다. 귀하의 첫 번째 _은 귀하가 유형을 부여한 이름에 상관하지 않는다는 것을 의미합니다. 두 번째 _은 현재 write에 제공 될 내용을 마음에 들지 않으므로 나중에 제공 할 것입니다. 생각하고 있듯이 코드의 _은 관련이 없습니다.

관련 문제