引用scala中的重载方法

时间:2014-11-19 10:25:01

标签: scala functional-programming overloading

我正在使用simplyscala.com REPL并尝试获取对象方法的引用。它正在与Strings合作但不是我想象的Integeres,我有点困惑,所以请帮助。

此...

"abc".+ _
res0: (Any) => java.lang.String = 

......按预期工作。如果它会在=符号之后显示函数体(可能是缩写形式),我希望它更好,但它给了我方法参考,而不是像我期望的那样调用(空)方法。

然而这......

42.+ _

error: missing parameter type for expanded function ((x$1) => 42.0.+(x$1))
   42.+ _
        ^

......给了我一个奇怪的错误。 _究竟是如何运作的?通过使用括号创建Integer并且没有将其解释为floating,我也更明确地尝试了它:

(42).+ _

error: ambiguous reference to overloaded definition,
both method + in class Int of type (x$1: Char)Int
and  method + in class Int of type (x$1: Short)Int
match expected type ?
       (42).+ _
            ^

它给了我另一个意想不到的错误,但是我知道编译器不知道我想要哪个重载方法有引用。

所以我的问题是:我的2.代码示例中的错误告诉了我什么?如何让编译器选择我的3.代码示例中的一种方法?

谢谢!

1 个答案:

答案 0 :(得分:3)

快速查看它是同样的问题,编译器只是以不同的方式解决:它不知道你正在谈论的过载。顺便说一下,在scala 2.11中,它们都抛出相同的错误,因为你不能再用.结束浮点文字了

如果你需要选择一个,你必须明确:

(42: Int) + (_: Int)

val x: Int => Int = 42.+ _

他们都会工作。