r - 在 R 中定义和实现接口(interface)

标签 r oop interface

我有兴趣在 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/

    相关文章:

    r - 基于第三个变量(数字)的列联表

    xml - 使用 R 和 Google Map API 获取两点(纬度、经度)之间的行驶距离

    python - 如何使用 R 获取过去几年的高音扬声器数据?

    c++ - 你如何断言一个对象在 C++ 中有一个特定的方法?

    java - 作业帮助需要使用 MyMath 的 java 接口(interface)

    r - gsub,先行后向

    php - 如何通过静态方法在其父类中使用子类中的静态变量

    c++ - C 方法有时比 C++ 方法有优势吗?

    c# - 一个类是否必须直接实现一个接口(interface)

    kotlin - 接口(interface)作为 Kotlin 中类的依赖项是什么意思?