我是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))
}
帮助表示感谢。
答案 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和负值的值的测试。