Scala 遗传尺度下的方差
如果特征函数2签名为Scala 遗传尺度下的方差,scala,Scala,如果特征函数2签名为 trait Function2[-T1, -T2, +R] extends AnyRef 为什么我不能创建这样的函数 val f2 : (String, String) => Int = new Function2[String, String, Int] { def apply(s1 : String, s2 : String) = s1.length + s2.length } val listOfFullNames : List[(Any
trait Function2[-T1, -T2, +R] extends AnyRef
为什么我不能创建这样的函数
val f2 : (String, String) => Int = new Function2[String, String, Int] {
def apply(s1 : String, s2 : String) = s1.length + s2.length
}
val listOfFullNames : List[(Any, Any)] = List(("Mark","Smith"), ("Kim","Hughes"), ("Zoe","Zaldana"), ("Matt","Damon"))
val output3 = listOfFullNames.map(x => f2(x._1, x._2))
像这样使用它
val f2 : (String, String) => Int = new Function2[String, String, Int] {
def apply(s1 : String, s2 : String) = s1.length + s2.length
}
val listOfFullNames : List[(Any, Any)] = List(("Mark","Smith"), ("Kim","Hughes"), ("Zoe","Zaldana"), ("Matt","Damon"))
val output3 = listOfFullNames.map(x => f2(x._1, x._2))
前两个类型参数中的反差表示
Function2[Any,Any,Int]
是Function2[String,String,Int]
的子类型,因为将两个any
值映射为Int
的任何函数也可以应用于两个String
值,因此也可以被视为一个函数(String,String)=>Int
,因为您试图用不起作用的超类型替换子类型