在 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" }
非常感谢大家花时间看问题!!
此致
内存
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" }
非常感谢大家花时间看问题!!
此致
内存