1

在 scala 中,通常的做法是堆叠包语句以允许更短的导入,但是当我将使用堆叠包的文件加载到 scala ide 并尝试使用从同一组织开始的导入时,我从似乎出现的编译器错误中得到演示文稿编译器。代码在 IDE 之外的 sbt 中编译得很好。

示例代码片段如下:

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-sbt 插件为此生成了 eclipse 项目文件。目录结构就是它应该的样子,所有依赖项都在类路径中。

编辑2:

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

4

2 回答 2

3

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

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

看看这是否可以避免刺激 IDE。

于 2013-10-09T23:57:21.263 回答
1

这是一个常见的烦恼,让 paulp 试图解决它。他的想法是不贡献类文件的目录不应该被视为一个包。如果您可以使用utilas scala.util,则应优先于foo.util该 util 为空的地方这样做。

目录是通常的util嫌疑人,因为谁没有 util 目录,特别是./util

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$ 

要进行调试,请找出有问题的包是从哪里加载的。

于 2013-10-10T05:04:49.680 回答