预期的标识符,但找到整数文字

时间:2017-03-29 10:23:07

标签: scala function literals identifier

我在写一个递归函数时遇到了这个问题,该函数计算两个通用函数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)                                                                   ^   找到一个错误。

谢谢!

3 个答案:

答案 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)