синглтон-переменная и класс с мутатором для этой синглтон-переменной - PullRequest
0 голосов
/ 10 августа 2011

Я практикую свою Скалу, а именно черты, и я немного застрял. Я решил наметить виды Людей Икс в классах и чертах.

Я застрял в свойствах Power. Я хочу синглтон для списка мощности

То, что я хочу в основном:

var Rogue = new HomosapienSuperior()
Rogue.addPower("Super Human Strength")

Использование addPower проверит по одноэлементному списку Power, чтобы увидеть, добавлено ли питание, если оно не добавлено, затем сгенерировать исключение и попросить пользователя сначала добавить его в одноэлементный список Power.

object Power {
  val powers = new HashMap[String, String] // power -> description, list of Power!
  val secondaryPowers = new HashMap[String, String]  // "Fly" -> "Can fly"
}

import Power._
import scala.collection.mutable.HashMap

class Power(power: String) {
 //How do I refer to the object/singleton Power list?
}

abstract class Homosapien {
  def name:HashMap[String, String]
  def sex: Sex
}

class HomosapienSuperior(
  val name:HashMap[String, String],
  val sex:Sex,
  val power: Power
) extends Homosapien

Так что я думаю о том, чтобы сделать:

class Power(power: String) {
  var power = List[String]
  def addPower(power: String): List = {
    //check the object Power.powers(power)
    // if not in the object Power throw exception else
    // new list (power) prepend this.power 
  }
 //How do I refer to the object/singleton Power list?
}

Но я не знаю, как ссылаться на переменную в объекте Power.

Мой код на данный момент:

object Sex extends Enumeration {
  type Sex = Value
  val male = Value("male")
  val female = Value("female")
  val other = Value("other")
}

object Power {
  val powers = new HashMap[String, String] // power -> description
  val secondaryPowers = new HashMap[String, String] 
}

import Sex._
import Power._
import scala.collection.mutable.HashMap

class Power(power: String) {

}

abstract class Homosapien {
  def name:HashMap[String, String]
  def sex: Sex
}

class HomosapienSuperior(
  val name:HashMap[String, String],
  val sex:Sex
  /*
  val power:HashMap[String, String],
  val secondaryPower:HashMap[String, String] */
) extends Homosapien with power with secondaryPower

class HomosapienSuperiorSuperior(
  val name:HashMap[String, String],
  val sex:Sex
  //val power:HashMap[String, String]
) extends Homosapien with power

trait power {
  val power = List[Power] //power name and description
}

trait secondaryPower {
  val secondaryPower = List[Power] //power name and description
}

Примечание: я еще не дошел до глав, посвященных кейс-классам, читая Программирование в Scala 2ed Book от Altima.

Спасибо за ваше время.

1 Ответ

1 голос
/ 10 августа 2011

Для доступа к объекту через класс:

Power.powers

Ответы предоставлены agilesteel

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