Я практикую свою Скалу, а именно черты, и я немного застрял. Я решил наметить виды Людей Икс в классах и чертах.
Я застрял в свойствах 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.
Спасибо за ваше время.