在 Scala 中使用 ListBuffer 的问题

Issues using ListBuffer in Scala

package com.listbuffer.ex

import scala.collection.mutable.ListBuffer

object IUEReclass{
   def main(args: Array[String]) {

     val codes = "XY|AB"
     val codeList = codes.split("|")
     var lb = new ListBuffer[String]()

     codeList.foreach(lb += "XYZ")

       val list = lb.toList

   }

我遇到以下异常。

[ERROR] C:\ram\scala_projects\Fidapp\src\main\scala\com\listbuffer\ex\ListBufferEx.
scala:38: error: type mismatch;
[INFO]  found   : scala.collection.mutable.ListBuffer[String]
[INFO]  required: String => ?
[INFO]
                lb += "XYZ"
[INFO]`enter code here`
                          ^
[ERROR] one error found

codeList 的类型是 Array[String],这是因为 String 上的 split 方法将 return 一个 Array[String]

现在您有一个 Array[String],您在 ListBuffer 上调用 foreach method, so what you should pass to this function is a function from a String to Unit. What you are giving it instead is a ListBuffer[String], because += 方法将 return 调用 ListBuffer。这种类型不一致会导致编译错误。

foreach 方法的详细信息

来自 foreach 方法的 Scala 文档:

Applies a function f to all elements of this array.

在这种情况下,此数组的元素是 String 类型,因此提供给 foreach 的函数应该接受 String.

类型的输入

备选方案

如果您打算将 codeList 的所有元素添加到 ListBuffer,正如 Paul 在评论中提到的那样,您可以使用

codeList.foreach(code => lb += code)

codeList.foreach(lb += _)

或者您可以使用 appendAll method from ListBuffer:

lb.appendAll(codeList)

哪个

Appends the elements contained in a traversable object to this buffer.

根据 Scala Docs.

使用.insertAll():

lb.insertAll(0, codeList)
val list = lb.toList

感谢 Paul,我能够修复它。

我只是把代码改成了

codeList.foreach { e => lb += "XYZ" }

非常感谢大家花时间看问题!!

此致

内存