4
我想要一個方法,可以使用或不使用類型參數來調用,併爲每個方法返回不同的值。下面是一些明顯的簡化代碼:重載基於類型參數的方法
object Foo {
def apply() = "Hello"
def apply[T]() = 1
}
與一類參數調用它是好的:
scala> Foo[String]()
res1: Int = 1
但稱它沒有一個類型參數不起作用:
scala> Foo()
<console>:9: error: ambiguous reference to overloaded definition,
both method apply in object Foo of type [T]()Int
and method apply in object Foo of type()java.lang.String
match argument types()
Foo()
這不是運行時問題,所以添加一個隱含的虛擬參數並沒有幫助。也沒有限制參數(Foo[Unit]()
)。有什麼辦法可以做到這一點,對編譯器來說不是不明確的嗎?
你說得對,'Foo():String'起作用。然而,這並不是很理想 - 整個想法僅僅是調用代碼。我真正想說的是「我調用了這個參數的版本,它接受零類型參數,而不是隻接受一個類型參數的版本」。 –
像這樣:'Foo []()' –