Scala 传递对该类的引用

MRN*_*MRN 1 scala class

我有一个类,有多种方法和成员。当我创建此类的实例时,我会在第一个类中创建另一个类的实例。第二类中的一些方法需要知道第一个类的哪个实例正在运行。目前,我正在尝试将“this”传递到接受类型firstClass的参数中。我究竟做错了什么?同样,我只是想让第二个类实例知道它属于哪个第一个类实例,以便它可以从中调用公共方法和成员。

编辑:代码示例:

def main(args:Array[String]) : Unit = {
  val objectOne = new classOne
}

class classOne {
  val mutableBuffer = mutable.Buffer[String]
  val objectTwo = new classTwo

  objectTwo.doThis(this)
}

class classTwo {
  def doThis (exA:classOne) = {
    exA.mutableBuffer += "Adding text to a Buffer in object One"
  }
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*ght 5

自打字通常是最干净的解决方案

class Bippy {
  outer =>
  ...
  class Bop {
    def demoMethod() = println(outer)
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

更新

示例代码改变了一切,这显然与内部类无关。我相信你的问题出在这一行:

val mutableBuffer = mutable.Buffer[String]
Run Code Online (Sandbox Code Playgroud)

它没有做你认为它正在做的事情,mutableBuffer现在指向mutable.Buffer单例,它实际上不是一个实例Buffer

相反,尝试以下两种之一:

val mutableBuffer = mutable.Buffer[String]()
//or
val mutableBuffer = mutable.Buffer.empty[String]
Run Code Online (Sandbox Code Playgroud)

您还应该坚持以大写字母开头的类/单例/类型名称的约定,将示例代码转换为:

import collection.mutable.Buffer

def main(args:Array[String]) : Unit = {
  val one = new ClassOne()
}

class ClassOne {
  val mutableBuffer = Buffer.empty[String]
  val two = new ClassTwo()

  two.doThis(this)
}

class ClassTwo {
  def doThis(one: ClassOne) = {
    one.mutableBuffer += "Adding text to a Buffer in object One"
  }
}
Run Code Online (Sandbox Code Playgroud)