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

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

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

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

我无法将列表更改为数组...因为我到处都在使用它,所以文件很大。

请您参考如下方法:

您应该使用诸如tb,...之类的高阶函数以功能方式修改mapfilter,并将它们的结果放入新的val s中(例如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使计算变得懒惰,以将计算时间移至稍后的时间点。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!