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

trimmedTagsArray之后是空的,即使tagsArray包含元素,即使我省略了trim调用。

我在这里想念什么?

4

2 回答 2

5

您需要了解 :+ 运算符。:+ 实际上不是修改现有的 trimmedTagsArray 变量,而是返回一个新数组,并将表达式“tag.trim”的结果附加到末尾。由于您既没有返回这个结果,也没有将它分配到任何地方,所以这个值被丢弃了。

我相信您实际上正在寻找的是用以下内容替换您的理解中的行。

trimmedTagArray = trimmedTagArray :+ tag.trim

虽然这将完成您想要的,但是,它不是迄今为止最好的解决方案。相反,请尝试以下...

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

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

于 2013-01-02T20:17:45.107 回答
2

有用。只是 for(...) {} 返回 Unit。你要 :

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