字符串集合视图的奇怪行为

时间:2015-10-11 19:30:47

标签: scala

我正在回答另一个问题并尝试编写此代码:

val view = "0000000000".view
println(List(0,12,30,4).foldLeft(view)((s, i) => s.updated(i, '1')).mkString)

但这实际上并没有编译,我不得不将其转换为seq并添加一个丑陋的类型归属,使其工作。 我注意到"0000".view返回SeqView[Char, String]这可能是正确的,但是当我"000".view.updated(0, '1')时,它会返回Seq[Char] = SeqViewP(...)

我希望它返回相同的SeqView[Char, String]。这是一个错误,还是我错过了什么?解决问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您是否有理由将String转换为视图?你能不能把它留作String?这将被转换为"字符串式" SeqLike[Char]根据需要通过隐式转换为StringOps,确保.updated(...)等操作的返回类型仍为String例如:

println(List(0,12,7,4).foldLeft("000000000000000")((s, i) => s.updated(i, '1')).mkString)

// prints: 100010010000100

注意:我提高了String的长度,并更改了列表中的一个值,以避免索引值大于String长度的问题,但如何你喜欢处理这个问题是一个不同的问题。