正在寻找最佳的Scala-Lang导入声明。在这里看不到任何建议:
那么推荐什么?
选项(1):
import package._
选项(2):
import package.ClassName
这通常是一个问题,但是要避免使用._
,以便使代码对库更改更为健壮,库更改可能会将不需要的符号引入您的代码或对代码进行其他细微的更改,而这些更改很难追踪。
关于隐式,通配符导入具有潜在的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
,但不必修改import语句。另一方面,Joshua Suereth states:
您可以不带通配符而单独提取隐式值。明确的导入比通配符导入具有“优先级”。因此,你可以使用显式导入来遮盖通配符导入。
也请考虑SIP Wildcard imports considered harmful中的讨论,例如Ichoran states
每个只能管理的文件顶部的多余杂物我发现,IDE甚至还不是很好,在大多数情况下是有害的。如果隐式冲突,并且编译器不会告诉您它们的确切来源,编译器问题。一旦检测到,修复就很容易了(例如
import org.foo.{troublesomeImplicit => _, _}
)。