3
val tagsArray = tags.split(",")
var trimmedTagsArray: Array[String] = Array()
for(tag <- tagsArray) {
  trimmedTagsArray :+ tag.trim
}

tagsArrayに要素が含まれていても、トリム呼び出しを省略しても、 trimmedTagsArrayは後で空になります。

ここで何が欠けていますか?

4

2 に答える 2

5

:+ 演算子を理解する必要があります。:+ は、既存の trimmedTagsArray 変数を変更するのではなく、実際には末尾に「tag.trim」という式の結果を追加した新しい配列を返します。この結果を返すことも、どこにも割り当てることもないため、この値は破棄されます。

あなたが実際に探しているのは、理解のためにあなたの行を次のように置き換えることだと思います。

トリミングされたタグ配列 = トリミングされたタグ配列 :+ tag.trim

これで目的は達成できますが、最善の解決策とは言えません。代わりに、次のことを試してください...

val trimmedTagsArray = for(tag <- tagsArray) yield {
  tag.trim
}

上記は、変更可能な状態を回避しながら、目的の値を持つ val (var よりも Scala で推奨) を作成します。

于 2013-01-02T20:17:45.107 に答える
2

できます。for(...){}はUnitを返します。あなたが欲しい:

for(tag <- tagsArray) yield {
  trimmedTagsArray :+ tag.trim
}
于 2013-01-02T19:59:03.173 に答える