我对定义和继承R
中的接口感兴趣。所谓接口,是指OOP接口。我知道R
支持类扩展。此链接http://adv-r.had.co.nz/OO-essentials.html提供了一个扩展R
中的引用类的示例。它定义了一个NoOverdraftAccount
参考类,它扩展了Account
参考类。
我希望能够定义一个帐户接口Account
,而不是扩展IAccount
引用类。我想NoOverDraftAccount
来实现IAccount
,例如:
NoOverDraftAccount
必须实现IAccount
中的所有方法。NoOverDraftAccount
无法声明IAccount
中尚未声明的任何新 public 方法。NoOverDraftAccount
可以声明 private 方法和属性。实现此目标的最佳方法是什么?
我最接近答案的是问题Multiple inheritance for R6 classes。但是,问题不在于接口。
感谢您的时间。
答案 0 :(得分:2)
在R之类的解释语言中,我认为“声明”没有多大意义。由于没有编译步骤,因此无法测试某些内容是否确实符合声明的接口,而无需在类上运行函数,例如{ {1}},在某个时候。
因此,我认为您必须从头开始-您需要定义接口规范类并编写does_class_follow(class,interface)
函数。
我的第一个想法是,一个类必须知道它遵循的接口,以便测试可以进行内省,但这也许是错误的,您应该拥有一个接口定义和伪声明的文件来测试所有内容
例如,有一些文件does_class_follow
如下:
interfaces.R
然后,在加载包时,这些 IAccount = Interface(
public = list("deposit","withdraw")
)
Implements(Account, IAccount)
Implements(Account, NoOverDraftAccount)
函数将运行并根据该Account接口的规范对该类进行测试。在加载时进行测试还是将这些内容放入Implements
文件夹中并使用./test/
或其他测试系统在测试时进行测试是更好的选择……
您可能已经知道,必须为要使用的R中的所有OO系统分别实现此功能-S3,S4,R5,ReferenceClasses,R6,proto,R.oo和所有其他I已经忘了...