为什么我可以使用 StringBuilder 而无需在 Scala 中显式导入它?

Why can I use StringBuilder without explicitly importing it in scala?

我正在使用 scala 2.11.0

我注意到 StringBuilder 是在 scala.collection.mutable.StringBuilder 和 java.lang.StringBuilder 中定义的。我还注意到 scala 隐式导入 java.lang., scala., scala.Predef._

为什么我写

时用的是scala.collection.mutable.StringBuilder而不是java.lang.StringBuilder
val def = new StringBuilder

谢谢

嗯,因为所有 here 默认情况下都可用。即 scala._ 默认可用。

在那个包对象中你可以看到:

 type StringBuilder = scala.collection.mutable.StringBuilder

这就是为什么 new StringBuilder 需要 scala.collection.mutable.StringBuilder 而不是 java.lang.StringBuilder

您可以通过查看 package.scala

来检查 scala 导入了什么

第 74-45 行通过

导入 StringBuilder
type StringBuilder = scala.collection.mutable.StringBuilder
val StringBuilder = scala.collection.mutable.StringBuilder

Scala 使用类型别名来确保核心 Scala 类型无需导入即可使用。

https://github.com/scala/scala/blob/27da46343cd545534819300235bc64ab74958c92/src/library/scala/package.scala#L74 将带您到类型别名声明。

这个 link 也会有所帮助 - Understanding what 'type' keyword does in Scala

请注意,由于类型别名声明在 Scala 包对象中,并且 scala._ 是隐式导入的,因此它会将类型别名声明带入每个编译单元的范围。