【问题标题】:Modifying multiple Lists inside a function and returning it in Scala修改函数内的多个列表并在 Scala 中返回
【发布时间】:2011-04-13 01:51:05
【问题描述】:

我在 scala 中有一个 [T] 和 [B] 类型的列表,其中有一个 E 类型的对象。

我想做一个接受这三个参数的函数:

def doSomething(t : List[T], b List[B], e : E) {
 ... }

但是我意识到 List 是不可变的,传递给函数的任何内容都被视为 val(而不是 var)。但我需要修改 t 和 b 并将修改返回给函数的调用者。有谁知道如何做到这一点?

我无法将列表更改为数组...因为我一直在使用它并且文件太大了..

【问题讨论】:

    标签: list scala functional-programming


    【解决方案1】:

    你应该修改tb,使用高阶函数,如mapfilter,...,并将它们的结果放入新的vals(例如modifiedTmodifiedB)。然后您可以使用 Tuple2 从方法中返回 2 个值。

    def doSomething(t: List[T], b: List[B], e: E) = {
      // somehting you want to do
      val modifiedT = t.map(...).filter(...)
      val modifiedB = b.map(...).filter(...)
      (modifiedT, modifiedB) // returns a Tuple2[List[T], List[B]]
    }
    

    在调用方法中,您可以通过这种方式分配值:

    val (t2, b2) = doSomething(t, b, e)
    

    当然,这取决于您对“修改”的含义。 如果这个修改是复杂的东西,你应该考虑使用view 使计算变得懒惰,以便将计算时间移到以后的时间点。

    【讨论】:

    • 如果您要返回某些东西,您需要在 e: E){ 之间添加一个 =
    • 你是正确的雷克斯,谢谢。我不知道我多久会忘记 Scala 中的这个小 =...
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2021-12-21
    • 2020-07-31
    • 2014-11-27
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多