我在写一个递归函数时遇到了这个问题,该函数计算两个通用函数f1和f2相等的点数(假设只有整数值)。
object X1 {
def numEqual(f1:Int=>Int,f2:Int=>Int)(a:Int,b:Int):Int=
if(a>b) 0
else f1(a)==f2(a) ? 1+numEqual(f1,f2)(a+1,b):0+numEqual(f1,f2)(a+1,b)
这就是编译器所说的:
X1.scala:5:错误:预期的标识符,但找到整数文字。 f1(a)== f2(a)? 1 + numEqual(f1,f2)(a + 1,b):0 + numEqual(f1,f2)(a + 1,b) ^ 找到一个错误。
谢谢!
答案 0 :(得分:4)
Scala中的if
构造是一个表达式。正如其他人已经说过的那样,没有三元运算符,因为不需要它 - 如果已经是表达式了。
我将你的函数重写为尾递归版(为了避免StackOverflowError
s),让我们看看它的外观:
@tailrec def numEqual(f1: Int => Int, f2: Int => Int)(a: Int, b: Int, res: Int = 0): Int =
if (a > b) res
else {
val inc = if (f1(a) == f2(a)) 1 else 0
numEqual(f1, f2)(a + 1, b, res + inc)
}
注意if表达式的结果如何分配给inc
- 在这里你通常会使用三元运算符。无论如何,我希望这会对你有所帮助。
答案 1 :(得分:1)
scala中不存在? :
运算符
答案 2 :(得分:1)