Scala中使用ListBuffer的问题
我得到以下异常Scala中使用ListBuffer的问题,scala,collections,listbuffer,Scala,Collections,Listbuffer,我得到以下异常 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.
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
}
codeList
的类型是Array[String]
,这是因为String
s上的方法将返回一个Array[String]
现在您有了一个数组[String]
,您正在调用该方法,因此您应该传递给该函数的是一个从字符串到单元的函数。您给它的是一个ListBuffer[String]
,因为ListBuffer
上的方法将返回一个ListBuffer
。此类型不一致将导致编译错误
有关foreach
方法的详细信息
从foreach
方法的Scala文档:
将函数f应用于此数组的所有元素
在这种情况下,该数组的元素属于String
类型,因此提供给foreach
的函数应该接受String
类型的输入
选择
如Paul在评论中所述,如果将codeList
的所有元素添加到ListBuffer
是您的意图,那么您可以使用
[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
或
或者,您可以从以下位置使用该方法:
哪个
将可遍历对象中包含的元素追加到此缓冲区
根据。代码列表的类型是Array[String]
,这是因为String
s上的方法将返回一个Array[String]
现在您有了一个数组[String]
,您正在调用该方法,因此您应该传递给该函数的是一个从字符串到单元的函数。您给它的是一个ListBuffer[String]
,因为ListBuffer
上的方法将返回一个ListBuffer
。此类型不一致将导致编译错误
有关foreach
方法的详细信息
从foreach
方法的Scala文档:
将函数f应用于此数组的所有元素
在这种情况下,该数组的元素属于String
类型,因此提供给foreach
的函数应该接受String
类型的输入
选择
如Paul在评论中所述,如果将codeList
的所有元素添加到ListBuffer
是您的意图,那么您可以使用
[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
或
或者,您可以从以下位置使用该方法:
哪个
将可遍历对象中包含的元素追加到此缓冲区
根据。使用.insertAll()
:
使用.insertAll()
:
多亏了保罗,我才把它修好
我刚把密码改成
codeList.foreach{e=>lb+=“XYZ”}
非常感谢所有花时间研究这个问题的人
问候
拉姆多亏了保罗,我才把它修好了
我刚把密码改成
codeList.foreach{e=>lb+=“XYZ”}
非常感谢所有花时间研究这个问题的人
问候
Ram这基本上是正确的。但是“您给它的是ListBuffer[String]中的函数”是错误的-没有传递函数,而是传递表达式。如果OP真的想为codelList的每个元素添加XYZ,。然后codeList.foreach{e=>lb+=“XYZ”}
将工作(即忽略其参数的正确类型的函数)。可能OP想要{e=>lb+=e}
,不过(或appendAll,它也这么做)感谢您指出这一点,它会相应地编辑答案。这基本上是正确的。但是“您给它的是ListBuffer[String]中的函数”是错误的-没有传递函数,而是传递表达式。如果OP真的想为codelList的每个元素添加XYZ,。然后codeList.foreach{e=>lb+=“XYZ”}
将工作(即忽略其参数的正确类型的函数)。可能OP想要{e=>lb+=e}
,不过(或appendAll,其作用相同)感谢您指出这一点,它将相应地编辑答案。不过,这与OP的代码的作用不同(它添加了“XYZ”codeList.length times)。不过,这可能是OP真正想要的:)而且appendAll
可能更好。不过,这并不像OP的代码那样(它添加了“XYZ”codeList.length times)。不过,这可能是OP真正想要的:)而appendAll
可能更好。
codeList.foreach(lb += _)
lb.appendAll(codeList)
lb.insertAll(0, codeList)
val list = lb.toList