是否有一个语法来允许函数文字的泛型类型参数?我知道我可以在一个方法把它包起来,如:在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