【问题标题】:Why can't I iterate over (Int, Int, Int) with Map? [duplicate]为什么我不能用 Map 遍历 (Int, Int, Int)? [复制]
【发布时间】:2012-05-16 02:35:20
【问题描述】:

可能重复:
Use 'map' and stuff on Scala Tuples?

为什么我不能遍历这个构造(我不知道如何调用它,因为 Scala 只是调用它(Int, Int, Int))?

val list = (1,2,3)
list.map{println _}

上面的代码产生以下错误:

:9: 错误:值映射不是 (Int, Int, Int)
的成员 (1,2,3).map{println _}

【问题讨论】:

    标签: scala


    【解决方案1】:

    您可以使用.productIterator.productElements 处理此类事情:

    t.productElements.toList.map(println)
    

    我习惯了 toList 严格操作,导致 productIterator 返回 Iterator 是惰性的。

    提示:对于没有结果的函数建议使用.foreach(产生副作用的函数,就像println一样)

    t.productElements.toList.foreach(println)
    

    【讨论】:

      【解决方案2】:

      我明白了。

      它被称为“元组”,这里已经回答了。

      Use 'map' and stuff on Scala Tuples?

      【讨论】:

      • 我用指向shapeless 的指针添加了对该问题的答案,这可能有用。
      【解决方案3】:

      根据您的值list 的名称,您似乎打算使用List 而不是Tuple。试试这个来创建一个定义mapList

      List(1,2,3).map{println _}
      

      【讨论】:

      • 你能定义减号吗?
      • 那是我,抱歉推理迟了。我投了反对票,因为 use another type/collection 不是合适的通用解决方案,IMO。当您无法编写 List(...) 而不是 (...) 时,您可能有 API 给出的元组(例如从函数返回)或其他一些限制)
      • +1 - 根据原始问题中的值名称list,很有可能使用列表而不是元组。因此,我觉得这是一个有效的答案。我进行了编辑以更清楚地了解@ie 在回答什么。原始问题也应进行编辑。
      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多