【问题标题】:Scala .map(toString()) gives List of CharScala .map(toString()) 给出 Char 列表
【发布时间】:2017-11-16 12:06:40
【问题描述】:

我尝试在 Scala 中创建自己的 map 方法,结果如下:

def map[A, B](f: A => B)(as: List[A]): List[B] =
    for (i <- as) yield f(i)  

如果我尝试将 List[Int] 转换为 List[String]:

val list = List(1, 2, 3, 4, 5)   //> list  : List[Int] = List(1, 2, 3, 4, 5)
map(toString()) (list)           //> res0: List[Char] = List(e, b, u, n, g)

如果我尝试,我会得到相同的结果:

list.map(toString())             //> res1: List[Char] = List(e, b, u, n, g)

我的问题:为什么给 toString() 而不是 List("1","2"...)?

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    您在当前对象上调用toString()(显然返回类似“?ebung...”的内容)并将结果字符串作为参数传递给map

    因此,您可能希望这会产生类型错误,因为 map 需要一个函数,但您传递的是一个字符串。然而,字符串也算作函数(因为RichString 实现了Function1[Int, Char] 特征),它接受一个整数并返回该索引处的字符。所以这就是为什么你会得到一个包含这些字符的列表。

    要做你想做的事(创建一个在其参数上调用toString的函数),你可以使用x =&gt; x.toString或简称_.toString

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 2013-01-15
      • 2018-11-16
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多