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

时间:2011-10-19 04:29:25

标签: scala

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

def overload(x: Int) = x.toString
def overload(s: String) = s

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

val f = overload _

但是既然如此,编译器正确地抱怨了一个含糊不清的引用。除了重命名其中一个之外,有没有办法制作一个或另一个重载方法的函数?

谢谢!

约翰

1 个答案:

答案 0 :(得分:15)

当你直接调用它时,编译器知道调用哪个overload的方式是通过知道它应用的参数的类型。 overload someInt只能引用overload(x: Int),因此不存在歧义。

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

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

val f : Int => String = overload _

或:

val f = (x : Int => overload x)

或:

val f = overload (_ : Int)

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