是否有一個語法來允許函數文字的泛型類型參數?我知道我可以在一個方法把它包起來,如:在Scala中,泛型類型參數可以與* function *定義一起使用嗎?
def createLongStringFunction[T](): (T) => Boolean = {
(obj: T) => obj.toString.length > 7
}
但後來我最終需要調用每一個類型T的方法,並得到一個新的功能。我翻看了語言參考,雖然我看到函數文字語法被編譯器翻譯爲一個實例,它本身具有通用輸入類型,但它看起來像編譯器magic在實現時會實現這些參數創建。我還沒有找到任何語法允許我實際上「讓一個或多個類型參數保持不受限制」。我更喜歡的是:
// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7
有沒有這樣的事情存在?或者就此而言,當擴展的方法具有泛型參數時,eta-expansion函數的顯式類型是什麼?
這是一個純粹做作和無用的例子。當然,我可以在這裏使用「任何」功能。
謝謝,我很害怕,可能是這樣。不過,以這種方式擴展該方法確實爲更復雜的案例打開了大門。雖然我找不到中間方法來做到這一點,但賦值時的類型提示可以帶來如此驚人的效果,例如:012ff'def doStuff [T,U](moreStuff:T => U)(obj: T)= moreStuff(obj) val timeAndAHalf = doStuff [Int,Double](_ * 1.5)_' 其中有相當一部分從其明確的對應部分中刪除 'def doStuff [T,U](moreStuff:T => U = moreStuff(obj) val timeAndAHalf:Int => Double =(num:Int)=> doStuff [Int,Double](num => num * 1.5)(num)' – erich2k8 2013-03-08 04:09:13
是類型參數不適用於函數對象的原因? – 2014-02-21 12:34:58