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

の型はcodeListis ですArray[String]。これは、 s のsplitメソッドStringが を返すためArray[String]です。

これArray[String]でメソッドを呼び出す ができたforeachので、この関数に渡す必要があるのは a からStringto への関数Unitです。代わりに与えているのは aです。これは、 aのメソッドがを返すためListBuffer[String]です。この型の不一致により、コンパイル エラーが発生します。+=ListBufferListBuffer

foreach方法の詳細

メソッドのScalaドキュメントからforeach

この配列のすべての要素に関数 f を適用します。

この場合、この配列の要素は type でStringあるため、指定された関数 toforeachは type の入力を受け入れる必要がありStringます。

代替案

のすべての要素をcodeListに追加することListBufferがあなたの意図である場合、ポールがコメントで述べたように、あなたはそれを行うことができます

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

また

codeList.foreach(lb += _)

appendAllまたは、次のメソッドを使用できますListBuffer

lb.appendAll(codeList)

どれの

トラバース可能なオブジェクトに含まれる要素をこのバッファに追加します。

Scala Docsによると。

于 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" }

この問題を見てくださった皆さん、ありがとうございました!!

よろしく

RAM

于 2015-04-14T08:10:36.820 に答える