我是新来的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'很夸张,不是吗? –