2012-01-09 99 views
1

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語句...爲什麼是這樣?我能做些什麼呢?

+0

現在,當我明白這個問題時,我相信Scala IDE中的自動導入必須以某種方式對此做出反應,而不僅僅是靜靜地導入對象而不是類。 – noncom 2012-01-11 07:39:29

回答

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的類型。 (但沒有太大意義,因爲對象TokenToken.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的人都可以直接與它交談,而不是方法間接。

+0

是的,你是對的,這是Eclipse ...並且感謝你的回答,我明白我的錯誤是我沒有創建一個類'Token'。 – noncom 2012-01-09 15:45:39

1

你的問題不是與包,而是與對象。

您將Token標記爲對象而不是類。這類似於將Java類中的每個方法標記爲靜態,但在Scala中,不存在聲明的機會。

package org.gui.tokens 
    class Token { 
    } 

請記住,因爲對象只有一個實例並且無法擴展,所以它們不能用作標識符。