我可以从scala中的重载方法获取函数吗?

jxs*_*ord 7 scala

假设我有两个使用相同名称和返回定义的方法,但是不同的参数:

def overload(x: Int) = x.toString
def overload(s: String) = s
Run Code Online (Sandbox Code Playgroud)

现在我想将其中一个转换为函数.如果方法没有重载,我会这样做:

val f = overload _
Run Code Online (Sandbox Code Playgroud)

但事实上,编译器正确地抱怨了一个含糊不清的引用.除了重命名其中一个之外,有没有办法让一个或另一个重载方法的功能?

谢谢!

约翰

Ben*_*Ben 15

编译器overload在直接调用时知道调用哪种方式是通过了解它所应用的参数的类型.overload someInt只能指overload(x: Int),所以没有歧义.

当你从中创建一个函数时,你还没有提供一个参数,所以编译器不知道你希望函数是什么类型,所以它不知道overload你指的是哪个.

解决这个问题的简单方法是明确告诉它类型:

val f : Int => String = overload _
Run Code Online (Sandbox Code Playgroud)

要么:

val f = (x : Int => overload x)
Run Code Online (Sandbox Code Playgroud)

要么:

val f = overload (_ : Int)
Run Code Online (Sandbox Code Playgroud)

(注意:我还没有测试过这些,但是它们的一些变化应该有效)