Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中使用ListBuffer的问题_Scala_Collections_Listbuffer - Fatal编程技术网

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