【问题标题】:Scala-Lang recommended import statement style: package._ or package.ClassName?Scala-Lang 推荐的导入语句样式:package._ 还是 package.ClassName?
【发布时间】:2020-02-05 05:17:47
【问题描述】:

寻找导入语句的最佳 Scala-Lang 实践。在这里看不到任何建议:

  1. https://docs.scala-lang.org/style/naming-conventions.html#packages
  2. https://github.com/scala/scala

那么有什么推荐的呢?

选项(1):

import package._

选项(2):

import package.ClassName

【问题讨论】:

  • 不推荐任何一种。如果您想导入很少,请使用yourpackage.Class1。如果您必须导入太多,请使用yourpackage._。 “很少”和“太多”之间的界限是一个主观的东西。
  • 别忘了import package.{ClassName1, ClassName2, ClassName3}

标签: scala import


【解决方案1】:

这通常是一个口味问题,但有一个论点是避免使用._,这样代码对库更改更加健壮,这些更改可能会在代码中引入不需要的符号或对代码进行其他难以进行的细微更改追踪。

【讨论】:

    【解决方案2】:

    关于隐式,通配符导入具有潜在的advantage,因为隐式的名称可以更改而无需修复导入语句,例如,考虑

    object Qux {
      object Implicts {
        implicit class ExtraListOps[T](l: List[T]) {
          def shuffle: List[T] = scala.util.Random.shuffle(l)
        }
      }
    }
    
    import Qux.Implicts._
    List(1,2,3,4,5).shuffle
    

    在这里我们可以重命名ExtraListOps,但不必修改导入语句。另一方面,Joshua Suereth states

    您可以在没有通配符的情况下单独提取隐式。显式 导入比通配符导入具有“优先级”。正因为如此,你 可以通过显式导入隐藏通配符导入。

    还要考虑 SIP Wildcard imports considered harmful 中的讨论,例如,Ichoran states

    每个只能管理的文件顶部的多余杂物 通过 IDE,即使不是很好,也是我发现的更多 在大多数情况下有害。如果你得到相互冲突的隐含和 编译器不会告诉你它们的确切来源,那是 编译器问题。一旦检测到,修复就很容易了(例如import org.foo.{troublesomeImplicit => _, _})。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 2017-01-25
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多