为什么Array's:+在内部无法理解?

时间:2013-01-02 19:56:23

标签: arrays scala append

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

trimmedTagsArray 为空,即使 tagsArray 包含元素,即使我省略 trim 调用。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

您需要了解:+运算符。而不是修改现有的trimmedTagsArray变量,而不是:+实际上返回一个新数组,其结果是“tag.trim”附加到结尾。由于您既不会返回此结果,也不会将其分配到任何位置,因此会丢弃此值。

我相信你真正想要的是用以下内容替换你的理解线。

trimmedTagArray = trimmedTagArray:+ tag.trim

虽然这将达到你想要的效果,但到目前为止它并不是最好的解决方案。相反,请尝试以下方法......

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

上面将创建一个val(在Scala over var中首选),它具有所需的值,同时避免可变状态。

答案 1 :(得分:2)

有效。只是为了(...){}返回单位。你想要:

for(tag <- tagsArray) yield {
  trimmedTagsArray :+ tag.trim
}