我有一个简单的递归函数将布尔值列表转换为字符串:
def boolsToString(lst: List[Boolean]): String = lst match {
case Nil => ""
case x::xs => x match {
case false => "0" + boolsToString(xs)
case true => "1" + boolsToString(xs)
}
}
这有效,但我不喜欢重复boolsToString。我只想做一次字符串连接(在案例之后):
def boolsToString2(lst: List[Boolean]): String = lst match {
case Nil => ""
case x::xs => x match {
case false => "0"
case true => "1"
} + boolsToString2(xs)
}
但Scala编译器拒绝了这一点:“';'预期但发现了标识符。“
在案例之后,是否还有另一种方法可以进行一次字符串连接?
答案 0 :(得分:4)
无需重新发明轮子。 Iterables已经有一种方法将项目连接成一个名为mkString的字符串:
def boolsToString(lst: List[Boolean]) =
lst.map(if(_) "1" else "0").mkString("")
答案 1 :(得分:3)
怎么样:
def boolsToString(lst: List[Boolean]): String = lst match {
case Nil => ""
case x::xs => (if (x) "1" else "0") + boolsToString(xs)
}
答案 2 :(得分:1)
我明白了;让原始版本工作的诀窍是在案例正文周围添加额外的括号:
def boolsToString2(lst: List[Boolean]): String = lst match {
case Nil => ""
case x::xs => (x match {
case false => "0"
case true => "1"
}) + boolsToString2(xs)
}
但@Shadowlands的回答非常好: - )