[英]error: type mismatch; found : (Int, Int) => Int required: Int
我是scala的新手,並對為什么這段代碼給我這個錯誤感到困惑。
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))
(x: A) => y: B
表示類型A => B
的匿名函數,因此花括號之間的表達式是一個函數(Int, Int) => Int
,這就是返回的內容。
您可以使用一個大數目的superflous東西,在return
-關鍵字,括號和整個=> -部分(M:INT:詮釋,N)。
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) }
(注意count的默認參數= 1)。 我覺得m,n,i有點太多的簡稱變量。 在count
, nominator, denominator
下面。
但是,歸罪歸還
(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和負值的值,這不是測試方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.