我在Scala中传递对重载方法的函数引用时遇到了一个有趣的问题(使用2.11.7)
以下代码按预期工作
def myFunc(a: Int, b: String): Double = {
a.toDouble + b.toDouble
}
def anotherFunc(value: String, func: (Int, String) => Double) = {
func(111, value)
}
anotherFunc("123123", myFunc)
但以下代码无法编译
def myFunc(a: Int, b: String): Double = {
a.toDouble + b.toDouble
}
def anotherFunc(value: String, func: (Int, String) => Double) = {
func(111, value)
}
def anotherFunc(value: Int, func: (Int, String) => Double) = {
func(value, "123123")
}
anotherFunc("123123", myFunc)
编译器喊出以下内容
scala> anotherFunc("123123", myFunc)
<console>:13: error: type mismatch;
found : String("123123")
required: Int
anotherFunc("123123", myFunc)
答案 0 :(得分:2)
您使用的是Scala REPL吗?其中一个设计决策是,如果您有两个定义了相同名称的变量/函数,那么&#34;最后定义的胜利&#34;。在你的情况下,它是一个带有Int参数的函数。
您可以使用以下方法在REPL中打印所有已定义的符号:
$intp.definedTerms.foreach(println)
此处有人有类似问题:Why its possible to declare variable with same name in the REPL?
答案 1 :(得分:1)
我不知道原因,但似乎你必须写
anotherFunc("123123", myFunc _)
让它发挥作用。