我如何附加到scala中的每一行,为什么说单位?

时间:2014-09-28 12:07:15

标签: string scala

我正在做一些愚蠢的尝试发送html电子邮件而不是真正理解我正在做什么,但我想将多行字符串发送到一个函数并获得相同的字符串,并在每行附加一些东西 - 我做错了什么?

def htmlizetext(intext: String)  {
  for(line <- intext.linesWithSeparators) {
    <br>line<br/>
  }
}


def htmlizetext(intext: String): String = {
 for(line <- intext.linesWithSeparators) {
   line + "<br/>"
 }
}

上述两项工作都不是

3 个答案:

答案 0 :(得分:2)

看看yield,这可能就是你要找的东西。

def htmlizetext(intext: String) = {
  for(line <- intext.linesWithSeparators) yield {
    <br>line<br/>
  }
}

您可能还想加入返回列表中的所有元素,以返回单个String而不是此类字符串的列表

您目前没有从您的方法返回任何内容,因为您没有从for语句中返回任何内容,这是您的语句的最后一种方法。因此,Scala编译器会推断您正在返回Unit

答案 1 :(得分:2)

您需要yield=(没有=方法仍会返回Unit)和某种形式的连接:

def htmlizetext(intext: String) = {
  for (line <- intext.linesWithSeparators) yield {
    line + "<br/>
  }
}.mkString

或更短的等价物:

def htmlizetext(intext: String) =
  intext.linesWithSeparators.map(_ + "<br/>").mkString

答案 2 :(得分:0)

因为没有返回值,除非你使用yield ... 更好的解决方案是按照以下方式“映射”您的收藏:

intext.linesWithSeparators.map(line=> s"$line<br/>").mkString("")

这将以所需的格式转换您的字符串,然后使用mkString连接所有字符串。如果需要,可以指定分隔符而不是空字符串