2012-04-03 3 views
0

HI 내가 스칼라는이 코드를 실행하려고에 새로운 오전 :이 유형이 일치하지 않는 이유는 무엇입니까?

class Number(x : Int){ 
     var number = x 

     def inc(): Int = { 
      number => number + 1 
     } 
    } 

을하지만 다음과 같은 오류 얻을 : solution.scala를 : 12 : 오류 : 누락 된 매개 변수 유형 수 => 숫자 + 1 나는 잘 모릅니다 이 문제를 해결하는 방법.

+0

중간 클래스 인'x'를 건너 뛸 수 있다는 것에주의하라 : class Number (var number : Int) {...}' – elbowich

답변

0

나 : 지능의 반환 형식이 유추하기 때문에

def inc = (x: Int) => x + 1 

, 필요는 지정하지 않으려면

난 당신이 뭔가를 쓰고 싶다 있다고 생각 그것

질문에서 변경 가능성을 다루는 경우, inc (1), inc (5) 등은 그 자체로 클래스 인스턴스에 전달 된 숫자의 표현을 변형합니다 (즉, 그것들은 "var number"와 동일하지만 그럴 수 있습니다. 우리가 여기에있는 것을 토대로 mutability에 대한 실질적인 필요성이 없다. ...

2

기본적으로, 당신은 expicitly 예상있어 어떤 종류의 말할 수있다 :이 컴파일되지 않습니다

def inc(): Int = { 
      number: Int => number + 1 
} 

하지만, 당신이 정의한 어떤 원인 때문에, 함수 :

def inc(): (Int) => Int = { 
    // some function that takes Int, calls it `number` and increment 
    number: Int => number + 1 
} 

은 더 가까울 것입니다.
BUT
당신이 정의한 번호는 의미가 없습니다. number 변수가 내부에 없으므로 스칼라 컴파일러가이 유형을 추론 할 수 없습니다. 단순히

def inc(): Int = {number += 1; number;} 
    // will take effect on number field 

또는

def inc(num: Int): Int = num + 1 
+1

나는'def inc() = {숫자 = 숫자 + 1; number}', * mutable * 유형 (ick!)으로 진행됩니다. –

+0

@pst 예, 맞아;) –

+0

정말 고마워. :) –

관련 문제