【问题标题】:Scala's Relative Package ImportsScala 的相对包导入
【发布时间】:2011-12-17 17:55:31
【问题描述】:

我在 Eclipse 中有一个多项目 Scala 工作区。我认为我对 Scala 导入包的方式缺乏了解而感到厌烦,但是在花费了比我愿意承认的更多时间寻找解决方案之后,我无法弄清楚这一点。我在一个简单的 2 项目设置中重现了这个问题。

项目 1:com.foo.mathematics 包含一个简单的 Vector 类

包含一个文件:

package com.foo.mathematics    

class Vector2D(x : Double, y : Double) {



  def length = math.sqrt(x*x + y*y)

}

项目 2:com.foo.analysis

package com.foo.analysis

import com.foo.mathematics.Vector2D



class Frame(xAxis : Vector2D, yAxis : Vector2D) {



}

Eclipse 在导入行显示错误,我得到的错误消息是:对象数学不是包 com.foo 的成员。

在大纲视图中,我的导入语句是这样说的:

com.foo.analysis.<error: <none>>.Vector2D

我已尝试将导入更改为:

import mathematics.Vector2D

import _root_.com.foo.mathematics.Vector2D

两者都不起作用...

我错过了什么?

【问题讨论】:

  • 尝试清理所有项目。构建项目1,然后在项目2中,删除导入行,然后尝试输入import com.fo[CTRL-SPACE],完成了吗?如果是,则再次输入 CTRL-SPACE,它是否提供 mathmaticsanalysis
  • 我设法用粗暴的 root 用法修复了它。

标签: eclipse scala import package


【解决方案1】:

import com.foo.mathmatics.Vector2Dimport _root_.com.foo.mathmatics.Vector2D 都应该没问题。很可能您没有将第一个项目添加到第二个项目的构建路径中(请参阅上下文菜单中的Build Path > Configure Build Path),或者需要在之后清理第二个项目(Project > Build Clean)在第一个项目中进行更改。

(另外,mathmatics 看起来像是 mathematics 的拼写错误,所以请仔细检查您在这两个地方的名字是否真的相同。)

不涉及相对包导入,它们只是意味着你可以这样写:

package com.foo
package analysis
import mathmatics.Vector2D

class Frame(xAxis : Vector2D, yAxis : Vector2D) {

}

【讨论】:

  • 谢谢。我在最初的问题中打错了(凌晨 2:00 提问的危险),但代码很好。通过非常刻意地将 root 导入应用到项目中每个 .scala 文件中的每个导入,我设法解决了我的“真实”项目中的问题。经过几个清洁/构建周期后,我认为我可以正常工作了。我偶尔必须做的另一件事是从我的构建路径中删除依赖库,然后重新添加它。不知道为什么这有帮助,但确实有效。
  • _root_ 如果您 1) 遵循正常的反向 URL 约定(您似乎这样做)并且 2) 没有名为 comorg 的包,则不需要等嵌套在其他包中。奇怪……你有最新的 Scala IDE(2.0 beta 11)吗?上一次我遇到这样的依赖问题是在好几个版本之前。
  • 我确实有最新的 Scala IDE 和 Eclipse 版本。一旦你知道你需要做什么,_root_ 的事情就不会太糟糕了。感谢您的帮助。
  • 我也有同样的问题。我尝试添加项目(在项目选项卡上)并添加类文件夹(在库选项卡上)。有没有其他方法可以从我缺少的另一个项目中添加类?
猜你喜欢
  • 2012-05-18
  • 2012-04-20
  • 2017-07-25
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多