2013-11-27 37 views
0

編譯器抱怨A類中定義的方法是遞歸方法,需要result.type但它不是遞歸的,因爲我調用了不同的方法,它是一個編譯器錯誤?編譯器錯誤地解釋爲遞歸調用

高清我(S:字符串){

}

類A { 高清我=我的( 「SSS」)}

+0

個人而言,我只是添加一個顯式的結果類型,然後繼續前進。 –

回答

6

由於您不能在類/特質/對象,我猜A是一個內部類。如果是這樣,你可以按如下做到這一點:

class Foo { outer => 
    def my(s:String) { 

    } 

    class A { def my = outer.my("sss") } 

} 

的符號outer =>稱爲自類型的註釋,並以這種形式只是用來創造的class Foothis未通過this陰影的別名的嵌套類型。

編輯

如果外部實體爲object,你可以通過它的名字引用它。

EDIT2

如果你重載的方法是不同的錯誤。如果從其中一個替代方法中調用重載方法,則需要一個結果類型。

def my(s: String) = s 
def my: String = my("foo") 

// Exiting paste mode, now interpreting. 

my: (s: String)String <and> => String 
my: (s: String)String <and> => String 

scala> my 
res0: String = foo 
+0

您的理由不正確,不是方法被遮蔽,它們可以在相同的名稱空間中定義,並且您將具有相同的行爲,這一切關於scala處理重載方法的方式,編譯器無法區分它們,我不知道爲什麼? – Gogolg

+0

編輯我的帖子,以重載方法來回答案例。 – drexin

+0

另外...在第一種情況下,你有一個內部類,它與重載無關。 – drexin

0

我認爲你需要讓你的定義一個不同的名稱,例如:

​​
+0

如果他不能更改名稱,該怎麼辦? –

+0

是的,我知道,我不知道爲什麼它的行爲如此 – Gogolg