我有兴趣在 R
中定义和继承接口(interface).所谓接口(interface),我指的是 OOP 接口(interface)。我知道R
支持类扩展。这个链接http://adv-r.had.co.nz/OO-essentials.html给出了一个在 R
中扩展引用类的例子.它定义了一个 NoOverdraftAccount
扩展 Account
的引用类引用类。
而不是扩展 Account
引用类,我希望能够定义一个帐户接口(interface),IAccount
.我愿意 我愿意 NoOverDraftAccount
实现IAccount
,这样:
NoOverDraftAccount
必须实现 IAccount
中的所有方法. NoOverDraftAccount
不能声明任何尚未在 IAccount
中声明的新公共(public)方法. NoOverDraftAccount
可以声明私有(private)方法和属性。 实现这一目标的最佳方法是什么?
我最接近答案的是问题 Multiple inheritance for R6 classes .但是,问题并不集中在接口(interface)上。
谢谢你的时间。
最佳答案
我认为“声明”在像 R 这样的解释性语言中没有多大意义。由于没有编译步骤,如果不在类上运行函数,就无法测试某些东西是否真正符合声明的接口(interface),例如 does_class_follow(class,interface)
。 , 在某一点。
所以我认为你必须从头开始 - 你需要定义一个接口(interface)规范类并编写 does_class_follow
功能。
我的第一个想法是,一个类必须知道它符合什么接口(interface),以便测试可以反省这一点,但也许这是错误的,你应该有一个接口(interface)定义和伪声明的文件来测试所有内容。
例如,有一些文件 interfaces.R
看起来像:
IAccount = Interface(
public = list("deposit","withdraw")
)
Implements(Account, IAccount)
Implements(Account, NoOverDraftAccount)
然后当包被加载时,那些
Implements
函数将根据 Account 接口(interface)的规范运行和测试类。无论是在加载时测试还是将这些东西放在 ./test/
中更好。文件夹并在测试时使用 test_that
对其进行测试或者另一个测试系统是一个问题......您可能知道,您必须为您要使用的 R 中的所有 OO 系统单独实现此功能 - S3、S4、R5、ReferenceClasses、R6、proto、R.oo 以及我忘记的所有其他系统...
关于r - 在 R 中定义和实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51298779/