【问题标题】:Scala import class errorScala导入类错误
【发布时间】:2012-02-06 02:42:27
【问题描述】:

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 中出现过这种情况,自动导入总是很完美。在这里它只是一遍又一遍地在WorldObject 文件中重复添加import org.gui.tokens.Token 语句......这是为什么呢?我该怎么办?

【问题讨论】:

  • 现在当我理解了这个问题时,我相信 Scala IDE 中的自动导入必须以某种方式对此做出反应,而不仅仅是静默导入对象而不是类。

标签: class scala import


【解决方案1】:

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 类型的对象。)

【讨论】:

    【解决方案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 的人都可以直接与其对话,而不是方法间接。

    【讨论】:

    • 是的,你是对的,这是 Eclipse...感谢你的回答,我明白我的错误是我没有创建一个类 Token
    【解决方案3】:

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

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

        package org.gui.tokens
        class Token {
        }
    

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

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 2012-08-04
      • 2020-10-18
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多