为什么没有StringBuilder=(字符串)在Scala中?
这种行为似乎被破坏了(我使用的是Scala 2.9.1) 这些都可以:为什么没有StringBuilder=(字符串)在Scala中?,scala,types,Scala,Types,这种行为似乎被破坏了(我使用的是Scala 2.9.1) 这些都可以: b+='a' b.append('b') b.append("de") 这会产生编译错误: b+="de" 你知道为什么只有StringBuilder#+=(c:Char)存在,而StringBuilder#append(c:Char)和StringBuilder#append(s:String)却快乐地共存吗?声明和实现StringBuilder#+=(s:String)有什么问题 这是Scala类型系统中的疏忽还是
b+='a'
b.append('b')
b.append("de")
这会产生编译错误:
b+="de"
你知道为什么只有StringBuilder#+=(c:Char)存在,而StringBuilder#append(c:Char)和StringBuilder#append(s:String)却快乐地共存吗?声明和实现StringBuilder#+=(s:String)有什么问题
这是Scala类型系统中的疏忽还是更深层次的问题?试试
b++=“de”
。String
被认为是Char
s的集合。谢谢你的提示。++=是可以忍受的,我仍然希望Scala类型的系统足够智能,能够区分字符串和字符;-)这就是为什么你必须使用不同的方法。据我所知,在2.9中,++=
在growtable
中以一种通用的方式定义为def++=(xs:TraversableOnce[a]):this.type={xs.seq foreach++=;this}
,这可能不是很有效。但是Scala 2.10的StringBuilder
为了提高效率而覆盖了+=
。我并不反对+=
也可以接受String
来简化事情,但这破坏了与其他集合类和方法的一致性。实际上恰恰相反,这保持了一致性:在所有可变集合中,+=
用于附加其他集合,而+=
仅用于单个元素。同样在本例中,+=
用于附加字符(单个元素)和+=
字符串(集合)
b+="de"