需要标识符,但找到整数文字
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 已经是一个表达式。
我将你的函数重写为尾递归版本(以避免 WhosebugError
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
- 这里您通常会使用三元运算符。总之,希望对你有帮助。
我在编写递归函数时遇到了这个问题,该函数计算两个通用函数 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 已经是一个表达式。
我将你的函数重写为尾递归版本(以避免 WhosebugError
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
- 这里您通常会使用三元运算符。总之,希望对你有帮助。