Scala导入类错误

时间:2012-01-09 15:10:51

标签: class scala import

Scala导入有问题。我有两个类的导入问题。第一个:

package org.world
import org.gui.tokens.Token


object WorldObject {

}

abstract class WorldObject[A <: WorldObject[_]](var xPos: Float, var yPos: Float) {
  def x = xPos
  def y = yPos

  def token: Token
             ^^^^^
  def move(dx: Float, dy: Float) {// : A = new A(x + dx, y + dy)
    xPos += dx // = x + dx
    yPos += dy
  }
}

和第二个:

package org.gui.tokens

object Token {

}

问题是def token: Token的返回类型用红色加下划线,错误说

  

未找到:键入令牌

课程地点一切都很好。其他课程没有类似的问题。我不记得Java中的这种情况,autoimport总能完美运行。这里只是一遍又一遍地在import org.gui.tokens.Token文件中重复添加WorldObject语句......为什么会这样?我该怎么办呢?

3 个答案:

答案 0 :(得分:7)

Token是一个对象,所以说def token: Token对编译器的意义与def token: 5def token: "Hello"有关。

如果要返回def token = Token对象,则表示Token;或者你的标记文件中是class Token {}; object Token extends Token {},所以确实有一个名为Token的类,或者你的意思是def token: Token.type,这意味着该方法必须返回某种类型的对象 Token。 (但没有多大意义,因为对象Token是唯一具有Token.type类型的东西。)

答案 1 :(得分:2)

首先,'用红色加下划线'意味着你要问Scala的特定IDE(Eclipse,IDEA?)。

object Token是一个单例对象,没有可以实例化的通用类型Token!只有一个对象,因此def token: Token错误地暗示可能存在不同的令牌。您可以通过两种方式纠正此问题。首先使用单Token类型:

def token: Token.type

或者,因为只有一种方法可以返回这样的对象,所以你已经可以提供实现了:

def token: Token.type = Token

或短

def token = Token

但是,这一点的用处值得怀疑。任何寻找对象Token的人都可以直接与它交谈,而不是间接方法。

答案 2 :(得分:1)

您的问题不在于包,而在于对象。

您将Token标记为对象而不是类。这类似于将Java类中的每个方法都标记为静态,但在Scala中,没有机会进行声明。

    package org.gui.tokens
    class Token {
    }

请记住,因为对象只有一个实例且无法扩展,所以它们不能用作标识符。