【问题标题】:Why can I use StringBuilder without explicitly importing it in scala?为什么我可以使用 StringBuilder 而不在 scala 中显式导入它?
【发布时间】:2016-02-11 09:39:34
【问题描述】:

我正在使用 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

谢谢

【问题讨论】:

    标签: scala import stringbuilder


    【解决方案1】:

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

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

    此链接也会有所帮助 - Understanding what 'type' keyword does in Scala

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

    【讨论】:

      【解决方案2】:

      您可以通过查看 package.scala 来检查 scala 导入的内容

      第 74-45 行通过

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

      【讨论】:

        【解决方案3】:

        因为所有here 都是默认可用的。即scala._ 默认可用。

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

         type StringBuilder = scala.collection.mutable.StringBuilder
        

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

        【讨论】:

          猜你喜欢
          • 2018-07-07
          • 2017-11-17
          • 1970-01-01
          • 2017-02-11
          • 2013-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-16
          相关资源
          最近更新 更多