我是新來的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))
}
幫助讚賞。
我是新來的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))
}
幫助讚賞。
它看起來像你正在返回一個函數,而不是像你聲明的Int
。
這是你想要做什麼:
def div(m: Int, n: Int, i: Int): Int = if ((m - n) <= 0) return i else div((m-n), n, (i+1))
我想那正是我想要的。看起來有點多餘,但我試圖從事的這本書是以這種格式做的。謝謝您的幫助! – Zul
(x: A) => y: B
意味着A => B
類型的匿名功能,讓你有括號之間的表達式是一個功能(Int, Int) => Int
,那就是獲取返回的。
您使用了大量超級玩意,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。
_Offtopic._請不要忘記[答案]中的[format](http://stackoverflow.com/editing-help#syntax-highlighting)代碼。這是代碼示例難以閱讀的第二個問題。 –
對不起,沒有意識到這是格式意味着什麼,我會確保下次照顧。 – Zul
'return'很誇張,不是嗎? –