我对定义和继承中的接口感兴趣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类的多重继承问题。但是,问题不在于接口。
谢谢你的时间。
我认为“声明”在像 R 这样的解释语言中没有多大意义。由于没有编译步骤,因此无法在某些时候在类上运行函数来测试某些内容是否实际上符合声明的接口,例如does_class_follow(class,interface), 。
所以我认为你必须从头开始 - 你需要定义一个接口规范类并编写函数does_class_follow。
我的第一个想法是,一个类必须知道它符合什么接口,以便测试可以内省这一点,但也许这是错误的,您应该有一个测试所有内容的接口定义和伪声明文件。
例如,有一些interfaces.R如下所示的文件:
IAccount = Interface(
public = list("deposit","withdraw")
)
Implements(Account, IAccount)
Implements(Account, NoOverDraftAccount)
Run Code Online (Sandbox Code Playgroud)
然后,当加载包时,这些Implements函数将运行并根据 Account 接口的规范测试类。是在加载时进行测试更好还是将这些东西放入文件夹中./test/并在测试时使用或其他测试系统进行测试test_that是一个问题......
您可能知道,您必须为您想要使用的 R 中的所有 OO 系统单独实现此功能 - S3、S4、R5、ReferenceClasses、R6、proto、R.oo 以及我忘记的所有其他系统...