首页 > 解决方案 > 在 R 中定义和实现接口

问题描述

我对定义和继承R. 所谓接口,我指的是 OOP 接口。我知道R支持类扩展。此链接http://adv-r.had.co.nz/OO-essentials.html给出了在R. 它定义了一个NoOverdraftAccount扩展引用类的Account引用类。

Account我希望能够定义一个帐户接口,而不是扩展参考类, IAccount. 我想我想NoOverDraftAccount实现IAccount,这样:

实现这一目标的最佳方法是什么?

我得到的最接近答案的是来自R6 classes 的多重继承问题。但是,问题并不集中在接口上。

谢谢你的时间。

标签: roopinterface

解决方案


我认为“声明”在像 R 这样的解释性语言中没有多大意义。由于没有编译步骤,如果不在类上运行函数,就无法测试某些东西是否真正符合声明的接口,例如does_class_follow(class,interface),在某些时候.

所以我认为你必须从头开始——你需要定义一个接口规范类并编写does_class_follow函数。

我的第一个想法是一个类必须知道它符合什么接口,以便测试可以反省这一点,但也许这是错误的,你应该有一个接口定义和伪声明的文件来测试所有内容。

例如,有一些文件interfaces.R看起来像:

 IAccount = Interface(
     public = list("deposit","withdraw")
 )

 Implements(Account, IAccount)
 Implements(Account, NoOverDraftAccount)

然后,当包被加载时,这些Implements函数将运行并根据 Account 接口的规范测试这些类。是在加载时测试更好,还是将这些东西放在./test/文件夹中并在测试时使用test_that或其他测试系统测试它们是一个问题......

您可能知道,您必须为您要使用的 R 中的所有 OO 系统单独实现此功能 - S3、S4、R5、ReferenceClasses、R6、proto、R.oo 以及我忘记的所有其他系统...


推荐阅读