我正在回答另一个问题并尝试编写此代码:
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]
。这是一个错误,还是我错过了什么?解决问题的最佳方法是什么?
答案 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
长度的问题,但如何你喜欢处理这个问题是一个不同的问题。