8
import swing._

object PeerTest extends SimpleSwingApplication {
  def top = new MainFrame {
    val p = peer.getMousePosition 
  }
}

与える

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

しかし、タイプを追加する

val p: Point = peer.getMousePosition 

それを大丈夫にします。なんで?

編集:問題の原因:

class A {
  def value() = 123
}

class B extends A {
  def value(b: Boolean) = 42  
}

object Main extends App {
  println ((new B).value) 
}

問題を引き起こしません:

class A {
  def value() = 123
  def value(b: Boolean) = 42  
}

class B extends A {}

object Main extends App {
  println ((new B).value) 
}

したがって、答えは、メソッドが異なるクラスにある場合にのみ発生する理由を説明する必要があると思います。

4

2 に答える 2

11

getMousePositionブールパラメータを使用しない方法と使用する方法の2つがあります。

型アノテーションがないと、Scalaは、1つのパラメーター(Function1オブジェクト)でメソッドへの参照が必要かどうか、またはパラメーターなしでメソッドを呼び出す(結果として)かどうかを認識しませんPoint

期待されるタイプを指定すると、意図が明確になります。

使用getMousePosition()も同様に機能するはずです。

于 2011-09-21T11:18:23.400 に答える
4

必要なオーバーロードされた代替を参照するより直接的な方法は、空の引数リストを含めることです。

peer.getMousePosition()
于 2011-09-21T11:22:47.783 に答える