继承scala下的差异

时间:2018-09-23 18:59:14

标签: scala

如果特征Function2签名为

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))

1 个答案:

答案 0 :(得分:3)

前两个类型参数的矛盾性意味着Function2[Any,Any,Int]Function2[String,String,Int]的子类型,因为任何将两个Any值映射到Int的函数都可以应用于两个String值,因此也可以视为函数(String,String) => Int