首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么scala-ide不允许文件顶部有多个包定义?

为什么scala-ide不允许文件顶部有多个包定义?
EN

Stack Overflow用户
提问于 2013-10-09 23:46:06
回答 2查看 559关注 0票数 1

在scala中,栈包语句to allow shorter imports是一种常见的做法,但是当我使用堆叠的包将文件加载到scala中,并且尝试使用从同一个组织开始的导入时,我会从似乎是表示编译器的地方得到一个编译器错误。代码在IDE外部的sbt中编译得很好。

下面是一个示例代码片段:

代码语言:javascript
运行
复制
package com.coltfred
package util
package time

import com.github.nscala_time.time.Imports._

在导入时,我得到了错误object github is not a member of package com.coltfred.util.com

如果我将导入移到一行,错误就会消失,但是我们在代码库中经常使用这种做法,因此将它们全部更改为单行包语句将是一件痛苦的事。

为什么会发生这种事,我能做些什么来解决这个问题吗?

编辑:

我使用了eclipse插件来生成eclipse项目文件。目录结构应该是什么,所有的依赖项都在类路径中。

编辑2:

原来在util包的测试树中有一个文件(应该在同一个包中),但是在顶部有一个重复的package语句。我没有检查测试树,因为它不应该影响主树的编译,但显然我错了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 05:04:49

这是一种常见的烦恼,它使帕尔普恼火地试图解决这个问题。他的想法是,不提供类文件的dir不应被视为包。如果您可以将util作为scala.util,则应该优先于使用该util为空的foo.util

util dir是通常的嫌疑人,因为谁没有实用dir,特别是./util

代码语言:javascript
运行
复制
apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/time
apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/com
apm@mara:~/tmp/coltfred$ vi com/coltfred/util/time/test.scala
apm@mara:~/tmp/coltfred$ scalac com/coltfred/util/time/test.scala
./com/coltfred/util/time/test.scala:5: error: object github is not a member of package com.coltfred.util.com
import com.github.nscala_time.time._
           ^
one error found
apm@mara:~/tmp/coltfred$ cat com/coltfred/util/time/test.scala
package com.coltfred
package util
package time

import com.github.nscala_time.time._

class Test

apm@mara:~/tmp/coltfred$ 

若要进行调试,请查找从何处加载违规包。

票数 1
EN

Stack Overflow用户

发布于 2013-10-09 23:57:21

不知道Scala为什么不喜欢这样,但是您可以使用_root_强制导入从顶层开始

代码语言:javascript
运行
复制
import _root_.com.github.nscala_time.time.Imports._

看看这是否能避免激怒IDE。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19284720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档