0
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
4

3 回答 3

4

的类型codeListArray[String],这是因为ssplit上的方法String会返回一个Array[String]

现在你有一个Array[String]你正在调用该foreach方法的 a ,所以你应该传递给这个函数的是一个从 aString到的函数Unit。你给它的是 a ListBuffer[String],因为+=a 上的方法ListBuffer将返回 a ListBuffer。这种类型不一致会导致编译错误。

foreach方法细节

从 Scala 文档的foreach方法:

将函数 f 应用于此数组的所有元素。

在这种情况下,这个数组的元素是类型String的,所以提供的函数foreach应该接受 type 的输入String

备择方案

如果将所有元素添加codeList到 theListBuffer是您的意图,正如 Paul 在评论中提到的那样,您可以使用

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

或者

codeList.foreach(lb += _)

或者,您可以使用以下appendAll方法ListBuffer

lb.appendAll(codeList)

哪个

将包含在可遍历对象中的元素附加到此缓冲区。

根据Scala 文档

于 2015-04-13T06:44:46.767 回答
0

使用.insertAll()

lb.insertAll(0, codeList)
val list = lb.toList
于 2015-04-13T07:52:16.593 回答
0

感谢保罗,我能够修复它。

我只是将代码更改为

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

非常感谢所有花时间研究这个问题的人!!

问候

内存

于 2015-04-14T08:10:36.820 回答