2013-11-27 36 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