2012-04-03 39 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 2012-04-04 02:31:46

回答

0

或者乾脆:

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

因爲詮釋返回類型推斷,不需要指定它

至於處理問題中的可變性,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 
} 

會更接近,
但是
它沒有意義和通知,你定義的那個數字有number類中的變量與 之間沒有什麼共同之處 - 這就是爲什麼Scala編譯器無法爲您推斷類型的原因。

我想你想寫類似:

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

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

我認爲它應該是'def inc ()= {number = number + 1;數字}',與* mutable *類型(ick!)似乎是這種情況。 – 2012-04-03 23:43:03

+0

@pst是的,你是對的;) – 2012-04-03 23:46:34

+0

謝謝你們真的幫助:) – 2012-04-03 23:47:46