为什么没有StringBuilder=(字符串)在Scala中?

为什么没有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类型系统中的疏忽还是

这种行为似乎被破坏了(我使用的是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++=“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"