Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在scala中导入包时出现问题_Scala_Package - Fatal编程技术网

在scala中导入包时出现问题

在scala中导入包时出现问题,scala,package,Scala,Package,假设我有这样的包: package test package test.views package test.others package views 现在在scala文件中,我想导入test.\u和视图.\u(不是test.views.\u),所以我写: import test._ import views._ 但是当我在视图下使用某些类时,它会报告类型xxx未找到,除非我将视图包更改为另一个名称 我现在该怎么办 您可以切换包导入顺序(理论上应该可以): 或者,您可以在视图中更精确地导入:

假设我有这样的包:

package test
package test.views
package test.others
package views
现在在scala文件中,我想导入
test.\u
视图.\u
(不是
test.views.\u
),所以我写:

import test._
import views._
但是当我在
视图下使用某些类时,它会报告
类型xxx未找到
,除非我将
视图
包更改为另一个名称


我现在该怎么办

您可以切换包导入顺序(理论上应该可以):

或者,您可以在
视图中更精确地导入:

import _root_.views._

您可以切换程序包导入顺序(理论上应该可以):

或者,您可以在
视图中更精确地导入:

import _root_.views._
还有另一种方法(尽管使用
\u root\u
是最可靠的方法):

还有另一种方法(尽管使用
\u root\u
是最可靠的方法):


在第二个代码段中,您编写了
package
,但您的目的是导入它们,no?package和import是两个不同的概念。你应该弄清楚你到底在问什么。另外,确切的错误消息是什么?在第二个代码段中,您编写了
,但您的目的是
导入
它们,no?包和导入是两个不同的概念。你应该弄清楚你到底在问什么。还有,确切的错误消息是什么?这是一个很好的例子,说明了为什么由于名称冲突,您永远不应该使用通配符导入。@Y.H Wong:请允许我不同意。是的,碰撞会发生,很容易解决。但是说“永远不要使用通配符导入”是不正确的。事实上,存在例外并不意味着我们应该完全禁止此功能。在我的Java/Scala经验中,它们很少,每次都很容易修复。在Java和Python等语言中,这是一个非常成熟的最佳实践,在任何严肃的代码中都不应该使用通配符导入,因为可能会导致一些很难发现的bug。这些社区的经验似乎还没有交叉授粉。为方便起见,只有在REPL中进行原型设计时才能使用通配符导入。在理想情况下,Scala编译器可以在我们要求时向我们发出警告,但目前还没有此类功能。@Y.H Wong:请提供一些链接来支持您的陈述:“这是一个非常成熟的最佳实践”和“导致一些很难找到的bug”Google“导入*被认为对Java有害”。对于Python,请查看Python教程第6.4.1节。我在这里引用它作为您的参考,“虽然某些模块设计为仅导出在使用import*时遵循某些模式的名称,但在生产代码中仍然被认为是不好的做法。”。格式化源代码时,所有IDE默认列出所有导入的名称是有原因的。这是一个很好的例子,说明了为什么由于名称冲突,您永远不应该使用通配符导入。@Y.H Wong:请允许我不同意。是的,碰撞会发生,很容易解决。但是说“永远不要使用通配符导入”是不正确的。事实上,存在例外并不意味着我们应该完全禁止此功能。在我的Java/Scala经验中,它们很少,每次都很容易修复。在Java和Python等语言中,这是一个非常成熟的最佳实践,在任何严肃的代码中都不应该使用通配符导入,因为可能会导致一些很难发现的bug。这些社区的经验似乎还没有交叉授粉。为方便起见,只有在REPL中进行原型设计时才能使用通配符导入。在理想情况下,Scala编译器可以在我们要求时向我们发出警告,但目前还没有此类功能。@Y.H Wong:请提供一些链接来支持您的陈述:“这是一个非常成熟的最佳实践”和“导致一些很难找到的bug”Google“导入*被认为对Java有害”。对于Python,请查看Python教程第6.4.1节。我在这里引用它作为您的参考,“虽然某些模块设计为仅导出在使用import*时遵循某些模式的名称,但在生产代码中仍然被认为是不好的做法。”。在格式化源代码时,所有IDE默认列出所有导入的名称是有原因的。
import test.{views => testviews, _}
import views._