Scala:通用方法组合
我刚刚开始学习scala,我对泛型非常困惑: 问题1:Scala:通用方法组合,scala,generics,Scala,Generics,我刚刚开始学习scala,我对泛型非常困惑: 问题1: def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = { list.filterNot(fun) } def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = { list.filterNot(fun) } def get
def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
list.filterNot(fun)
}
这里的X看起来像Java的E(这段代码很好用)
问题2:
def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
list.filterNot(fun)
}
为什么任何一个都不起作用。我认为Any可以接受任何类型(这不是编译)
问题3:
def getRemainingItem[X](list : List[X], fun : (X) => Boolean) : List[X] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[Any], fun : (Any) => Boolean) : List[Any] = {
list.filterNot(fun)
}
def getRemainingItem(list : List[_], fun : (_) => Boolean) : List[_] = {
list.filterNot(fun)
}
同样,这不起作用,“u”和“Any”之间的区别是什么?答案1:X是泛型类型参数。因此,方法
getRemainingItem
是一个通用方法,将使用具体的类型参数(类型实例化,如X=Int
)调用该方法
答案2:该代码段不会编译(使用Scala 2.11测试)
答案3:对于某些{type X}(一种存在类型),类型T[]
是T[X]的快捷方式。这类似于Java通配符()。当然,说“某个未知类型T”不同于说“任何”(这是一个具体类型——顶部类型)
有关更多信息:
-这里的X看起来像Java的E(这段代码很好)
什么E
?2
编译得很好。a time参数位置的下划线表示未知时间。因此,列表[]
和()=>布尔值
,\u
是未知的,因此不一定相同。