Scala передает ссылку на этот класс - PullRequest
1 голос
/ 25 сентября 2011

У меня есть класс с несколькими методами и членами.Когда я создаю экземпляр этого класса, я создаю экземпляр другого класса в первом классе.Некоторые из методов этого второго класса должны знать, какой экземпляр первого класса запущен.В настоящее время я пытаюсь передать «this» в аргумент, который принимает тип firstClass.Что я делаю неправильно?Опять же, я просто хочу, чтобы экземпляр второго класса знал, к какому экземпляру первого класса он принадлежит, чтобы он мог вызывать публичные методы и члены из него.

EDIT: Пример кода:

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

Ответы [ 2 ]

4 голосов
/ 25 сентября 2011

Самопечатание здесь часто является самым чистым решением

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

ОБНОВЛЕНИЕ

Пример кода меняет все, это явно не касается внутренних классов.Я полагаю, что ваша проблема в этой строке:

val mutableBuffer = mutable.Buffer[String]

Она не делает то, что вы думаете, она делает, mutableBuffer сейчас указывает на синглтон mutable.Buffer, на самом деле это не экземплярa 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"
  }
}
2 голосов
/ 25 сентября 2011

Мне пришлось внести некоторые поверхностные изменения в ваш пример кода, чтобы он запустился:

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.Вам нужно что-то помимо этой функциональности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...