scala - scala中调用map函数的不同方式

标签 scala tuples

我的功能是

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/

相关文章:

c++ - std::tuple 比 std::array 快吗?

python - 为什么我们需要 Python 中的元组(或任何不可变数据类型)?

scala - 为什么在 Scala 中设置方法不强制执行可比较的类型?

postgresql - 如何用Doobie正确处理Hikari连接池

返回匿名对象的 Scala 函数?

java - IntelliJ 中自定义逗号优先格式的设置

c++ - 查找元组元素的最大值 C++

scala - 在您选择的 Scala 编辑器中,⇒ 的键盘快捷键是什么?

swift2 - Swift 2.0 元组,许多作业

python - Type(3,) 返回一个整数而不是 python 中的元组,为什么?