错误:类型不匹配;发现:(Int,Int)=>需要Int:Int

时间:2011-09-13 21:24:03

标签: scala

我是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)) 
}

帮助表示感谢。

3 个答案:

答案 0 :(得分:4)

看起来你正在返回一个函数而不是Int,就像你宣布的一样。

这是你要做的事情:

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

答案 1 :(得分:3)

(x: A) => y: B表示类型A => B的匿名函数,因此大括号之间的表达式是函数(Int, Int) => Int,这就是返回的内容。

答案 2 :(得分:0)

你使用了大量的超级东西,return - 关键字,括号和整数(m:Int,n:Int)=&gt; - 部分。

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,我是一个有点太多的短命名变量。在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和负值的值的测试。