如果您沒有真正保養關於這種東西會有什麼類型,您可以用[_,_]對它進行參數化。例子可能是一些類似
val thing = new SomeClass[_, _]()
或
def thingDoer(sc: SomeClass[_, _]) { /* Stuff */ }
更清楚它的性質了一下,下劃線被稱爲「生存型」,它基本上是一個原始類型的等價在Java中,它也可以類似於Java的通配符類型。例如,這種精神分裂的Java代碼
public void thingThatTakesAMapList(List<? extends Map> mapList) { /* Whatever */ }
是一樣的,因爲這Scala代碼
def thingThatTakesAMapList(mapList: List[_ <: Map[_, _]]) { /* Some incredibly wild subroutine */ }
此外,值得注意的名單之區分[任何]和List [_] ...是非常微妙。前者是Any的列表,後者是[我不知道/關心]的列表。儘管如此,_ 與完全不同。例如,如果你有一類與此簽名
class SillyClass[T <: Map[_, _]]
它不會是有效的做到這一點
val thing = new SillyClass[Any]()
同時可能有效期爲你做這個
val thing = new SillyClass[HashMap[_, _]]()
,如果函數將SillyClass作爲參數,則可以編寫
def sillyClassTaker(sc: SillyClass[_])
並且確定sc是而不是將要通過類型Any進行參數化;它是通過Map [_,_]的某個未知子類進行參數化的。也就是說,下劃線是佔位符,但它仍然需要有效的類型參數。所以,雖然這很酷,所有...我不特別推薦使用它太多。如果你需要做一些... wildcard-y,或者根本不在乎類型參數,那麼這是一個很好的選擇。
如果要保存一些打字後,你可能會想嘗試一個類型別名,比如'型SomeClassAny = SomeClass [AnyRef,Any]'。 – huynhjl 2011-12-28 20:05:58
一個默認的'value'(見你問題的標題)是不同的:'Foobar(b:Int = 42)';你在談論類型參數。 – 2011-12-28 20:42:18
@huynhjl似乎'type'是最合適的解決方案。你應該將其作爲回答發佈 – 2011-12-28 21:30:06