在R中定义和实现接口

时间:2018-07-12 06:36:39

标签: r oop interface

我对定义和继承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。但是,问题不在于接口。

感谢您的时间。

1 个答案:

答案 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已经忘了...