2011-09-13 37 views
1

我是新來的scala和混淆爲什麼這段代碼給了我這個錯誤。錯誤:類型不匹配;發現:(Int,Int)=> Int要求:Int

def div(m: Int, n: Int, i: Int): Int = { 
    (m: Int, n: Int) => 
    if ((m - n) <= 0) 
     return i 
    else 
     div((m-n), n, (i+1)) 
} 

幫助讚賞。

+0

_Offtopic._請不要忘記[答案]中的[format](http://stackoverflow.com/editing-help#syntax-highlighting)代碼。這是代碼示例難以閱讀的第二個問題。 –

+1

對不起,沒有意識到這是格式意味着什麼,我會確保下次照顧。 – Zul

+1

'return'很誇張,不是嗎? –

回答

4

它看起來像你正在返回一個函數,而不是像你聲明的Int

這是你想要做什麼:

def div(m: Int, n: Int, i: Int): Int = if ((m - n) <= 0) return i else div((m-n), n, (i+1)) 
+0

我想那正是我想要的。看起來有點多餘,但我試圖從事的這本書是以這種格式做的。謝謝您的幫助! – Zul

3

(x: A) => y: B意味着A => B類型的匿名功能,讓你有括號之間的表達式是一個功能(Int, Int) => Int,那就是獲取返回的。

0

您使用了大量超級玩意,return - 關鍵字,括號和整個(m:Int,n:Int)=> - 部分。

def div (m: Int, n: Int, count: Int): Int = 
    if ((m - n) <= 0) count else div (m - n, n, count + 1) 

如果你喜歡用一根火柴,你可以這樣做:

def div (m: Int, n: Int, count: Int = 1): Int = (m - n) match { 
    case (diff: Int) if (diff <= 0) => count 
    case _ => div (m - n, n, count + 1) } 

(張數= 1的默認參數)。 m,n,i是我的口味有點太短的變量。在count之下,nominator, denominator會適合。

然而,implentation返回

(0 to 2).map (x => div (14+x, 5, 1)) 
res61: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 3, 4) 

在那裏我希望(2,3,3) - 你是在相反的方向四捨五入。

if ((m - n) < 0) i-1 else ... 

會修復 - 更改比較器,並返回i-1(count-1)。

但是,這不是包含0和負值的值的testet。

相關問題