2012-04-03 5 views
0

HI私はこのコードを実行しようとするとスカラ座で新しいです:このタイプのミスマッチはどのように一致しますか?

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

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

しかし、私は次のエラーを取得する:solution.scala:12:エラー:不足しているパラメータの型 番号は=>数+ 1 は、私は知りませんこれを修正する方法。

+0

あなたは中間 'X'をスキップすることができます注: 'クラスNumber(VAR番号:INT){...}' – elbowich

答えて

0

または単に:

私はあなたのような何かを書きたかったと思うんそれ

問題のmutabilityを扱う場合、inc(1)、inc(5)などは、それ自体、クラスインスタンスに渡される数値の表現を変換したものです。彼らは "var number"と同じですが、そうではありません)。私たちがここで見たものに基づいて、可変性のための本当の必要はありません...

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変数と共通するものはありません。そのため、Scalaコンパイラはタイプを推論できません。 、のIntの戻り値の型が推論されているので、

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

指定する必要が:

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

または

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

を、私はそれが 'デフINCされるべきだと思います()= {数字=数字+ 1; number} '、* mutable *型(ick!)のようになります。 –

+0

@pst yeah、you right;) –

+0

おかげで本当に助けになりました:) –