编译器错误地将其解释为递归调用

时间:2013-11-27 14:17:10

标签: scala

编译器抱怨A类中定义的方法是递归的,需要result.type但是它不是递归的,因为我调用的是不同的方法,它是编译器错误?

  

def my(s:String){

     

}

     

A级{        def my = my(“sss”)}

2 个答案:

答案 0 :(得分:6)

由于你不能在类/特征/对象之外使用方法,我想A是一个内部类。如果是这样,您可以按如下方式进行:

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

  }

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

}

表示法outer =>称为自我类型注释,在此表单中仅用于创建this class Foo的{​​{1}}的别名,该别名不会被{{1嵌套类型。

修改

如果外部实体是this,您只能通过其名称引用它。

<强> EDIT2

如果您有重载方法,则会出现其他错误。如果从其中一个备选方案中调用重载方法,则需要结果类型。

object

答案 1 :(得分:0)

我认为您需要将def设为不同的名称,例如:

class A { def my2 = my("sss") }