понимание этого скала кода

Я пытаюсь преобразовать некоторый код Scala в C ++, и я впервые сталкиваюсь с Scala, и у меня возникают проблемы с определенным фрагментом кода. Итак, у меня есть базовый класс следующим образом:

sealed abstract class FactorNode(factor: Factor) extends Node {
private var _factor: Factor = factor
def factorMarginal(): Factor
}

Теперь у меня есть производный класс следующим образом:

case class SingleFactorNode(factor: SingleFactor, gate: FactorGate) extends FactorNode(factor) {
def factorMarginal(): Factor = {
val inMsg = gate.getEndGate().getMessage()
val factorMarginal = factor * inMsg
factorMarginal
}
}

Пара вопросов: 1: factorMarginal() метод в базовом классе. Вроде нет тела и ничего не возвращает. Как это работает? Это совершенно лишнее, как оно есть?

2: Второй factorMarginal() метод в производном классе. Является ли это по сравнению с базовым фактором. Кроме того, последняя строка в этом методе называется сама (без скобок), и я не понимаю, что это делает. Он называется базовым классом factorMarginal или реализует какую-то рекурсию?

1

Решение

factorMarginal Метод в базовом классе является абстрактным. В C ++ вы бы сделали его чисто виртуальным:

virtual Factor factorMarginal() = 0;

Да, factorMarginal Метод в производном классе переопределяет метод в базовом классе. В C ++ вы бы написали это следующим образом:

virtual Factor factorMarginal() override {
auto const inMsg = gate.getEndGate().getMessage();
return factor * inMsg;
}

Последняя строка не вызывает сам метод, но возвращает локальную переменную с тем же именем.

Обязательно сделайте методы const в C ++, если это имеет смысл.

Обратите внимание, что нет эквивалента C ++ для Scala sealed,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]