我正在使用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.代码示例中的一种方法?
谢谢!
答案 0 :(得分:3)
快速查看它是同样的问题,编译器只是以不同的方式解决:它不知道你正在谈论的过载。顺便说一下,在scala 2.11中,它们都抛出相同的错误,因为你不能再用.
结束浮点文字了
如果你需要选择一个,你必须明确:
(42: Int) + (_: Int)
或
val x: Int => Int = 42.+ _
他们都会工作。