理解这个scala代码

时间:2014-02-18 20:03:03

标签: c++ scala

我正在尝试将一些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 个答案:

答案 0 :(得分:3)

基类中的factorMarginal方法是抽象的。在C ++中,您可以将其设为纯虚拟:

virtual Factor factorMarginal() = 0;

是的,派生类中的factorMarginal方法会覆盖基类中的方法。在C ++中,您可以按如下方式编写它:

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

最后一行不调用方法本身,但它返回具有相同名称的局部变量。

如果有意义,请务必在C ++中创建方法const

请注意,Scala的sealed没有C ++等价物。