import swing._
object PeerTest extends SimpleSwingApplication {
def top = new MainFrame {
val p = peer.getMousePosition
}
}
Run Code Online (Sandbox Code Playgroud)
给
error: ambiguous reference to overloaded definition,
both method getMousePosition in class Container of type (x$1: Boolean)java.awt.Point
and method getMousePosition in class Component of type ()java.awt.Point
match expected type ?
val p = peer.getMousePosition
Run Code Online (Sandbox Code Playgroud)
但添加类型
val p: Point = peer.getMousePosition
Run Code Online (Sandbox Code Playgroud)
没事.为什么?
编辑:导致问题:
class A {
def value() = 123
}
class B extends A {
def value(b: Boolean) = 42 …Run Code Online (Sandbox Code Playgroud) 原谅冗长的设置。这个问题与Scala相关,但没有得到回答:对重载定义的模糊引用 - 最佳消歧?.
我对 Scala 很陌生,让我失望的一件事是 Scala:
这两种语言特性让我很困惑。看下面的代码:
类我的类{
def something(in: String): String = {
在 + "_X"
}
定义一些东西:字符串 => 字符串 = {
案例_ =>“固定”
}
}
val my = new MyClass()
println(List("foo", "bar").map(my.something))
我希望List("foo_X", "bar_X")通过调用something与map's requiredString => ?参数匹配的原型来打印。相反,输出是List("Fixed", "Fixed")- Scala 2.11 正在调用无参数something(),然后将其返回值传递给map.
如果我们注释掉 的第二个无参数原型something,输出变为预期结果,证明另一个原型在上下文中是有效的。
向第二个原型添加一个空参数列表(制作它def something())也会改变行为。
改变my.somethingtomy.something(_)唤醒 Scala 到它之前默默忽略的歧义:
错误:对重载定义的引用不明确, …