2012-01-09 10 views
1

Scalaインポートに問題があります。私は2つのクラスで輸入の問題があります。見つからないScalaインポートクラスエラー

package org.gui.tokens 

object Token { 

} 

そして、問題はdef token: Tokenの戻り値の型は、エラーが

を言って赤い下線が引かれていること:最初の1:

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 
    } 
} 

2つ目のタイプトークン

クラスの場所はすべて問題ありません。他のクラスにも同様の問題はありません。私はJavaでこのような状況を覚えていない、自動インポートは常に完全に働いた。ここでは、WorldObjectファイルに繰り返し文import org.gui.tokens.Tokenが繰り返し追加されています...それは何故ですか?それについて私は何ができますか?

+0

私はこの問題を理解すると、Scala IDEの自動インポートが何らかの形でこれに反応して、クラスの代わりにオブジェクトを静かにインポートしなければならないと考えています。 – noncom

答えて

7

Tokenはオブジェクトなので、は、def token: 5またはdef token: "Hello"といってもコンパイラにとって意味があります。

Tokenオブジェクトを返す場合は、def token = Tokenのいずれかを指定します。またはあなたのトークンファイルにclass Token {}; object Token extends Token {}を意味するので、実際にはTokenというクラスがあります。つまり、def token: Token.typeを意味します。これは、メソッドがオブジェクトTokenの型の何かを返さなければならないことを意味します。 (オブジェクトTokenがタイプToken.type持つ唯一のものですので、しかし、多くのポイントが、そこではありません。)すべての

2

まず、「赤い下線」あなたはスカラ座(Eclipseの、IDEAのための特定のIDEについて尋ねていることを意味? )。

object Tokenはシングルトンオブジェクトですが、インスタンス化できる一般的なタイプはTokenです!正確に1つのオブジェクトがあるので、def token: Tokenは異なるトークンが存在する可能性があると誤って示唆しています。これは2つの方法で修正できます。

def token: Token.type = Token 

または短い

def token = Token 
:このようなオブジェクトを返すための唯一の方法があるので、あなたはすでに実装を提供することができ、

def token: Token.type 

か:まずTokenのシングルトンタイプを使用することにより、

しかし、これの有用性は疑問です。オブジェクトTokenを探している人は、メソッドの間接化ではなく、直接それに話すことができます。

+0

はい、あなたは正しいです、これはEclipseです...そして、あなたの答えに感謝します。自分の間違いは、クラス 'トークン 'を作成しなかったことです。 – noncom

1

あなたの問題はパッケージではなくオブジェクトで問題になります。

トークンをクラスとしてではなくオブジェクトとしてマークしました。これは、Javaクラスのすべてのメソッドを静的にマークするのと似ていますが、Scalaでは宣言する機会はありません。

package org.gui.tokens 
    class Token { 
    } 

オブジェクトはインスタンスが1つしかなく、拡張できないため、識別子として使用できないことに注意してください。