2

(第一次发布到 Stack Overflow,所以也许我没有在哪里/如何发布,抱歉)

TL;DR:我如何在 R6 中制定这个特定的继承方案:

             MOTHER                       (MOTHER is a virtual class)
            /  |  \   
           /   |   \  
          /    |    \  
         /     |     \
Daughter1     Son     Daughter2           (Son is a virtual class)
    \         / \         /
     \       /   \       /
      \     /     \     /
       \   /       \   /
       Incest1     Incest2                (Incestuous but no diamond issues)

S4 也可以使用相同的方案,我做到了,实际上我正在尝试将我的 S4 类转换为引用 R6 类。但是关于 R6 类的文档并没有那么大,我找不到如何去做。

如果这不可能,我将不得不复制大量代码,即来自“Son”的所有方法,我不想这样做。

我把最后两个班级乱伦开玩笑说成是开玩笑,但我是认真的:我这里没有钻石问题,女儿和儿子提供的方法根本不一样。

如果您考虑可以替代该方案的其他方案,我很想听听:MOTHER 和 Son 课程是虚拟的(这在 R6 中实际上是不可行的,对吧?但我不在乎),所以也许我不认为应该是继承问题。

感谢您的帮助。

** 编辑 : **

好的,我找到了解决方案。既然乱伦是全功能的儿子和女儿(因为他们是儿子和女儿),什么时候不只是重新构建它们的多重继承机制?那是 :

1° 对于 Son 没有且需要继承的每个函数,在 Son 中构建一个同名的包装器方法,在其中调用通用 coercice() 方法。

2° coercise 方法只是做 R6 应该做的:它初始化一个“Son”元素和一个“Daughter”元素,并检查它们是否是我们作为参数传递的方法是否存在。如果它只适用于一个人,让我们去吧,他们用现在是儿子或女儿的强迫乱伦来称呼它。如果两者都实施它,它会对我大喊大叫(但它可以做其他事情!)

它非常丑陋,但它可以工作并且可以做我想做的事情。

实际上,它并没有那么难看,它只是实现了应该是的东西。你认为这可以做得更好吗?

4

0 回答 0