2011-10-19 60 views
7

比方说,我有相同的名称和回报,但不同的PARAMS定义了两种方法:我可以从scala中的重载方法获取函数吗?

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

现在我想其中的一个转换的功能。如果方法不超载,我会做到这一点:

val f = overload _ 

但由于它是,编译器正确地抱怨不明确的引用。是否有任何方法可以使重载方法的一个或另一个的功能不同于重命名其中的一个?

谢谢!

约翰

回答

15

编译器知道这overload当你把它直接是知道它的应用到参数的类型调用的方式。 overload someInt只能指overload(x: Int),所以没有歧义。

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

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

val f : Int => String = overload _ 

或:

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

或:

val f = overload (_ : Int) 

(注:我没有测试了这些,但他们的一些变化应该工作)

+0

感谢本。我会给他们一个旋转。 – jxstanford

相关问题