添加默认包导入
在 Java、Scala 或一般任何 JVM 语言中,都有一组默认导入的包。例如,Java 会自动导入 java.lang
,您无需在 Java 代码文件中执行此操作。
现在我不知道哪个组件准确地处理这个问题(编译器?JVM?),但是有什么方法可以默认导入其他包甚至类吗?
假设您有一个包,定义了您在整个项目中使用的一组实用函数(例如 Scala 中的 scala.math ),如果您能够跳过它的导入,那就太好了每门数学相关课程。
In Java, Scala, or generally any JVM language, there is a set of packages that is imported by default. Java, for instance, automatically imports java.lang
, you don't need to do it in your Java code file.
Now I don't know which component takes care of this exactly (the compiler? the JVM?), but is there any way to have additional packages or even classes imported by default?
Say you have a package defining a set of utility functions you use throughout your project (an example could be scala.math
in Scala), it would be great if you were able to skip the import for it in every math related class.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
从 2.8 开始,Scala 具有包对象,其内容会自动导入到包的每个文件中。在包的顶级目录(例如,x/y/z/mypackage)中创建一个名为 package.scala 的文件,并将其放入其中
然后自动导入包对象中的任何定义(即,不需要 import 语句)到包 xyzmypackage 中的任何文件中。
您可以查看 Scala 源代码——执行 find dir -name package.scala——有很多源代码,最顶层定义了scala 包本身,它会自动导入到每个 scala 源文件中。
Scala, as of 2.8, has package objects, the contents of which are automatically imported into every file of the package. Create a file called package.scala in the top level directory of your package (e.g.,
x/y/z/mypackage
), and put into itThen any definition within the package object is automatically imported (i.e., no import statement is needed) into any file in package x.y.z.mypackage
You can take a look at the Scala sources -- do a find dir -name package.scala -- there are a bunch of them, the topmost defining the implicit imports for the scala package itself, which are automatically imported into every scala source file.
Jim Balter 在 他的答案(投票吧)Scala 2.8 包对象。
Scala 实际上有自己的 scala 包对象。
请参阅“放置包对象的位置”。
所以包对象可以解决给定包的显式导入问题,但不能解决任何包的显式导入问题。
其当前限制包括:
原始答案:
在Scala方面,像“Scala 默认导入 scala.collection.JavaConversions._ 吗?" 显示您不能仅以 Scala 用户身份添加默认导入。
它必须得到语言的支持。
顺便说一句,结论是:
拉斐尔< /a> 但确实发表了评论:
果然,这篇 Scala 文章描述了如何扩展 Scala 编译器。
但支持的主要补充是:
因此,即使进行树重写(包括额外的导入),我也不确定所说的重写是否会及时完成,以便正确分析类型和函数(由您要求的隐式导入引用)。
但也许 Scala 编译器角对此有更多想法。
Jim Balter mentions in his answer (go upvote it) the Scala 2.8 package object.
Scala actually has its own scala package object.
See "Where to put package objects".
So package object can solve the problem of explicit import for a given package, but not for any package.
Its current limitations include:
Original answer:
On the Scala side, a question like "should Scala import scala.collection.JavaConversions._ by default?" shows that you cannot just add default imports as a Scala user.
It has to be supported by the language.
By the way, the conclusion was:
Raphael does comment though:
And sure enough, this Scala article describe how to extend the Scala compiler.
But the main additions supported are:
So even with a tree rewrite (including additional imports), I am not sure said rewrite would be done in time for the types and functions (referenced by the implicit imports you are asking for) can be correctly analyzed.
But maybe the Scala Compiler Corner has more ideas on that.
java.lang
中所有类的默认导入在 Java 语言规范 (7.5.5)所有其他类都必须使用 import 语句导入。
The default import of all classes from
java.lang
is specified in the Java language Specification (7.5.5)All other classes have to be import with the import statement.
在 Java 中没有办法做到这一点。
In Java there is not a way to do that.