2011-09-13 87 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。

相关问题