在Scala中,从增量编译器(sbt,Eclipse中的sbt,IntelliJ)的效率和速度的角度来看,使用通配符导入是不是不好?它是否会对这些增量编译器决定在发生更改时重新编译的内容的方式产生不利影响?
例如,如果对于一个新的类X
,我只需要从包pack
导入类A
和B
(而不是C
),我写这个会受到惩罚吗:
import pack._
而不是这个?
import pack.{ A, B }
假设A
和B
不依赖于C
,当C
更改时,X
使用通配符导入而不是更具体的导入重新编译,还是依赖跟踪系统足够智能,以意识到尽管通配符导入,X
C
并未使用?
有一个微小的影响,但你可能不会注意到它。 影响是,当引用符号"Foo"时,编译器必须将"Foo"解析为完全限定的名称。 它可以查找"Foo"的范围受通配符导入的影响。 但这都是在内存中完成的,你几乎肯定不会注意到分辨率速度的微小差异,除非你在一个包中有一些疯狂的东西,比如数千个类。
除此之外,没有影响。如果您导入不依赖于更改的pack._和一些不依赖于更改的pack._任意类,则无需重新编译文件。