簡體   English   中英

錯誤:類型不匹配; 找到:(Int,Int)=>需要Int:Int

[英]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有點太多的簡稱變量。 countnominator, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM