r - 在 R 中定义和实现接口
问题描述
我对定义和继承R
. 所谓接口,我指的是 OOP 接口。我知道R
支持类扩展。此链接http://adv-r.had.co.nz/OO-essentials.html给出了在R
. 它定义了一个NoOverdraftAccount
扩展引用类的Account
引用类。
Account
我希望能够定义一个帐户接口,而不是扩展参考类, IAccount
. 我想我想NoOverDraftAccount
实现IAccount
,这样:
NoOverDraftAccount
必须实现中的所有方法IAccount
。NoOverDraftAccount
不能声明任何尚未在 中声明的新公共方法IAccount
。NoOverDraftAccount
可以声明私有方法和属性。
实现这一目标的最佳方法是什么?
我得到的最接近答案的是来自R6 classes 的多重继承问题。但是,问题并不集中在接口上。
谢谢你的时间。
解决方案
我认为“声明”在像 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 以及我忘记的所有其他系统...
推荐阅读
- r - 根据另一个数据框更改数据框中的数字
- javascript - 一个短路的 Promise.allSerial(),没有异步等待
- javascript - 我在反应状态有问题。它继续筑巢
- python - ValueError:标签输入类型(字符串和数字)的混合
- batch-file - 批处理文件缺少操作数错误,但输出正确
- yaml - 识别 YAML 中相同类型的实体(结构与内容)
- python - 如何在django中的外键关系的另一端嵌入过滤器
- sql - 如何使用 SQL 获取 CosmosDB 中每个项目的最新记录
- singleton - NextJS:初始化一个对象一次
- javascript - php优惠券系统