Вычисления перед расширением класса

64
9

Вот мнимый пример:

class Bottle(volume: Int, water: Int) = {
def ratio = water / volume.toDouble
}

class RandomFullBottle extends Bottle(foo, foo)
^ ^
these two should be random and equal

Как мне достичь этого, то есть, где вызвать randomBetween(a, b) если я не хочу прибегать к передаче случайного значения конструктору RandomFullBottle?

спросил(а) 2021-01-19T21:47:45+03:00 6 месяцев, 1 неделя назад
1
Решение
89

Вы можете создать два конструктора для вашего класса RandomFullBottle:

    Частный конструктор, который принимает int и передает его родительскому конструктору Bottle Публичный, который не принимает аргументов, генерирует случайное значение и передает его частному конструктору

Вот так:

class Bottle(volume: Int, water: Int) {
def ratio = water / volume.toDouble
}

class RandomFullBottle private(amount: Int) extends Bottle(amount, amount) {
def this() = this(myRandomGenerator())
}

ответил(а) 2021-01-19T21:47:45+03:00 6 месяцев, 1 неделя назад
46

Это немного запутанно, но это должно сделать это.

object Bottle {
def init(): (Int, Int) = {
val r = scala.util.Random.nextInt
(r, r)
}
}

class Bottle(val volume: Int, val water: Int) {

def this(vw : (Int, Int)) {
this(vw._1, vw._2)
}

def this() {
this(Bottle.init())
}

def ratio = water / volume.toDouble
}

class RandomFullBottle extends Bottle

val randomBottle = new RandomFullBottle
println(randomBottle.ratio)
println(randomBottle.volume)
println(randomBottle.water)

ответил(а) 2021-01-19T21:47:45+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема