需要标识符,但找到整数文字

Identifier expected but integer literal found

我在编写递归函数时遇到了这个问题,该函数计算两个通用函数 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: error: identifier expected but integer literal found. f1(a)==f2(a) ? 1+numEqual(f1,f2)(a+1,b) : 0+numEqual(f1,f2)(a+1,b) ^ one error found.

谢谢!

scala 中不存在 ? : 运算符

Scala 不使用三元运算符,http://alvinalexander.com/scala/scala-ternary-operator-syntax

Scala 中的 if 构造是一个表达式。正如其他人已经说过的那样,没有三元运算符,因为不需要它 - if 已经是一个表达式。

我将你的函数重写为尾递归版本(以避免 WhosebugErrors),让我们看看它的样子:

@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 - 这里您通常会使用三元运算符。总之,希望对你有帮助。