鑑於以下對重載函數:爲什麼Scala無法在存在方法重載的情況下推斷匿名函數的類型,並且只有一個方法需要函數?
def onAction_=(implicit aeh: jfxe.EventHandler[jfxe.ActionEvent]) {
onAction() = aeh
}
def onAction_=(handler: ActionEvent => Unit): Unit = {
onAction() = new jfxe.EventHandler[jfxe.ActionEvent] {
override def handle(event: jfxe.ActionEvent): Unit = handler(event)
}
}
當試圖使用分配方法作爲這樣
onAction = { ae => doSomething() }
Scala的抱怨爲ae
缺少類型參數。爲什麼Scala無法推斷ae
的類型,因爲只有一個重載採用函數類型,因此不會對調用哪種方法感到困惑。
Scala編譯器是否簡單地放棄嘗試在看到重載函數時推斷類型?
P.S.除此之外,IntelliJ Scala插件能夠將ae
的類型解析爲ActionEvent
的類型。我對插件能夠做一些編譯器不能做的事情感到好笑,或者沒有。
不,這是絕對有可能在這種情況下推斷的函數的輸入類型。你可以把問題最小化爲一個獨立的例子,沒有依賴關係,也沒有多餘的東西(語法'_ ='糖,含義等)? –
我試圖將問題最小化爲一個自包含的示例,並注意到,當我刪除所有導入時它工作正常。顯然有一個類似函數簽名的隱式轉換,編譯器基本上不知道選擇哪個。我想這個問題可以被看作是各種虛驚。我是否應該以我如何解決它的方式給出答案,至少作爲一個警示性的故事? –