2014-11-19 2 views
3

나는 simplyscala.com REPL에서 놀고 있었고 객체 메소드에 대한 참조를 얻으려고 시도했습니다. 그것은 Strings와 함께 작동하지만 Integeres와는 기대하지 않았고 조금 혼란 스럽습니다. 그래서 도움을 받으실 수 있습니다. 예상대로scala에서 오버로드 된 메소드에 대한 참조

이 ...

"abc".+ _ 
res0: (Any) => java.lang.String = 

는 ... 작동합니다. = 기호 (아마도 단축 된 형식) 뒤에 함수 본문을 표시하면 좋겠지 만, 예상대로 (공백) 메서드를 호출하는 대신 메서드 참조를 제공합니다.

그러나이 ...

42.+ _ 

error: missing parameter type for expanded function ((x$1) => 42.0.+(x$1)) 
    42.+ _ 
     ^

은 ... 나에게 이상한 오류를 제공합니다. 여기 _은 정확히 어떻게 작동합니까? 나는 또한 더 명시 Integer을 만들기 위해 괄호를 사용하고 해석 필요가 없으므로 그것을 시도한 floating :

(42).+ _ 

error: ambiguous reference to overloaded definition, 
both method + in class Int of type (x$1: Char)Int 
and method + in class Int of type (x$1: Short)Int 
match expected type ? 
     (42).+ _ 
      ^

그것은 비록 나에게 또 다른 예기치 않은 오류가 있습니다,하지만 난 컴파일러가 알지 못하는 것을 이해 오버로드의 어떤 내가 원하는 방법은에 대한 참조가 있습니다.

내 질문은 : 내 코드 예제에서 오류가 무엇을 말해 줍니까? 그리고 컴파일러가 내 코드 예제에서 메서드 중 하나를 선택하게하려면 어떻게해야합니까?

감사합니다.

답변

2

간단한 문제는 컴파일러에서 다르게 해결 한 것과 동일한 문제입니다. 어떤 과부하에 대해 이야기하고 있는지 알지 못합니다.

을 : 당신이 더 이상 .)

리터럴 부동 소수점을 종료 할 수 없기 때문에 그런데, 스칼라 2.11에서 둘은 하나를 선택해야하는 경우, 당신은 명시 적으로해야 할 것이다, 같은 오류가 발생

(42: Int) + (_: Int) 

또는

val x: Int => Int = 42.+ _ 

그들은 것 모두 작업

.

관련 문제