Class Scala传递对此类的引用

Class Scala传递对此类的引用,class,scala,Class,Scala,我有一个类,有多个方法和成员。当我创建这个类的实例时,我会在第一个类中创建另一个类的实例。第二个类中的一些方法需要知道第一个类的哪个实例正在运行。目前,我正在尝试将“this”传递到接受类型firstClass的参数中。我做错了什么?同样,我只想让第二个类实例知道它属于哪个第一个类实例,这样它就可以从中调用公共方法和成员 编辑:代码示例: def main(args:Array[String]) : Unit = { val objectOne = new classOne } 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"
  }
}

在这里,自键入通常是最干净的解决方案

class Bippy {
  outer =>
  ...
  class Bop {
    def demoMethod() = println(outer)
  }
  ...
}
更新

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

val mutableBuffer = mutable.Buffer[String]
它没有做你认为它在做的事情,
mutableBuffer
现在指向
mutable.Buffer
singleton,它实际上不是
Buffer

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

val mutableBuffer = mutable.Buffer[String]()
//or
val mutableBuffer = mutable.Buffer.empty[String]
您还应该坚持以大写字母开头类/单例/类型名称的惯例,将示例代码转换为:

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"
  }
}

在这里,自键入通常是最干净的解决方案

class Bippy {
  outer =>
  ...
  class Bop {
    def demoMethod() = println(outer)
  }
  ...
}
更新

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

val mutableBuffer = mutable.Buffer[String]
它没有做你认为它在做的事情,
mutableBuffer
现在指向
mutable.Buffer
singleton,它实际上不是
Buffer

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

val mutableBuffer = mutable.Buffer[String]()
//or
val mutableBuffer = mutable.Buffer.empty[String]
您还应该坚持以大写字母开头类/单例/类型名称的惯例,将示例代码转换为:

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"
  }
}

为了使示例代码运行,我不得不对其进行一些表面更改:

import scala.collection.mutable

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

  objectTwo.doThis(this)
}

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

val objectOne = new classOne
println(objectOne.mutableBuffer(0))

但它的效果与预期一样。
classTwo
对象可以修改
classOne
对象。您需要此功能之外的功能吗?

我必须对示例代码进行一些表面更改,以使其运行:

import scala.collection.mutable

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

  objectTwo.doThis(this)
}

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

val objectOne = new classOne
println(objectOne.mutableBuffer(0))

但它的效果与预期一样。
classTwo
对象可以修改
classOne
对象。您是否需要此功能之外的功能?

如果您提供一些代码来演示您正在尝试做的事情,以及哪些具体不起作用,可能会有所帮助。如果您提供一些代码来演示您正在尝试做的事情,以及哪些具体不起作用,可能会有所帮助。不,我不需要,谢谢Dan!我要好好玩玩这个。我的代码比我给出的示例更复杂。。。但概念是一样的。让我看看我能不能让它工作!不,谢谢,丹!我要好好玩玩这个。我的代码比我给出的示例更复杂。。。但概念是一样的。让我看看我能不能让它工作!嘿,谢谢你花时间重写你的答案。实际上,我尝试了声明为buffer[String]()的缓冲区,但仍然不满意。我考虑了您对代码样式的考虑。。。谢谢你指出它们。我将查找singleton术语,因为我以前没有意识到使用过它,这可能是我应该理解的。再次感谢!!嘿,谢谢你花时间重写你的答案。实际上,我尝试了声明为buffer[String]()的缓冲区,但仍然不满意。我考虑了您对代码样式的考虑。。。谢谢你指出它们。我将查找singleton术语,因为我以前没有意识到使用过它,这可能是我应该理解的。再次感谢!!