我的功能是
val f2 : (String, String) => Int = new Function2[String, String, Int] {
def apply(s1 : String, s2 : String) = s1.length + s2.length
}
为什么我不能在 Scala 中执行此操作
val listOfFullNames = List(("Mark","Smith"), ("Jim","Duggan"), ("Eddie","Murphy"), ("Sylvester","Stallone"))
val output3 = listOfFullNames.map(f2)
错误消息很有趣,它说预期:(String, String) => TypeInferredB,但实际 (String, String) => Int
//But this works fine
val output3 = listOfFullNames.map(x => f2(x._1, x._2))
我这样做的原因纯粹是因为,这有效
val f :String => Int = new Function[String, Int] {
def apply(s : String) = s.length
}
可以这样使用
val listOfNames = List("Mark", "Jim", "Eddie", "Sylvester","Stallone")
val output = listOfNames.map(f)
只是想知道以下用法之间的区别。
list.map(_.lowercase)
list.map(f)
listOfFullNames.map(x => f2(x._1, x._2))
最佳答案
listOfFullNames
是元组的List
。元组是单个实体。 f2()
需要 2 个单独的 String
参数,因此它不会接受元组。
如果仔细查看错误消息,您会注意到 found: (String,String)
和 required: ((String,String))
之间的区别。
正如已经指出的,f2.tupled
将采用 (String,String)
类型的单个元组。
val output3 = listOfFullNames.map(f2.tupled) //this works
顺便说一句,f2()
可以表达得更简洁。
val f2 :(String, String) => Int = _.length + _.length
关于scala - scala中调用map函数的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52455358/