问题标签 [reference-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 引用类的功能接口
我试图弄清楚为引用类(或实际上是 S4/S3 类)提供功能用户界面的概念含义。简而言之,我担心如果我编写如下所示的代码,那么它就相当于编写函数代码。
这是一个简单的线性回归类:
面向对象的界面对用户不是很友好,所以就像在Martin Morgan 的幻灯片中,我会为底层的引用类写一个功能性的用户界面:
现在这个函数式接口在观察上等同于一个纯函数式
我试图弄清楚这是否是因为我的示例在病态上很简单,但我仍然想知道编写引用类然后将它们包装在函数式接口中而不是编写纯函数式代码是否有任何意义。
任何详细的例子都会有很大帮助。
r - `ReferenceClass` 中具有延迟评估的计算字段
在一个精简的示例中,我有一个引用类对象,该对象在字段中Portfolio
保存单个资产值。holdings
还有一个额外的字段value
,它是通过简单地将 的各个值相加来计算的holdings
:
在填充holdings
插槽后,很明显value
插槽已被计算。
问题:如何重写定义以实现对字段的延迟、按需评估value
,仅当它被直接调用时Portfolio$value
?
r - 如何在 R 中创建虚拟引用类?
我在虚拟/抽象类中找不到太多help(ReferenceClasses)
- 任何人都可以提供创建一个基本示例吗?此外,如何指定虚拟方法并强制子类必须实现它?
r - 如何在参考类方法中使用 `warning()`?
warning()
似乎在参考类方法中被忽略了,尽管stop()
似乎有效。那是,
仅产生:
这是故意的,如果是,为什么?我应该如何在类方法中发出警告?
r - 如何获取引用类的名称?
例如,是否有一些功能getName
可以让我这样做:
r - 引用类生成器是否必须与类本身同名?
当我为类本身赋予类生成器不同的名称时(这样做是有正当理由的),我开始遇到问题:
导致:
然而方法baz
显然存在,因为我可以这样做:
如果将生成器名称更改为 ,则不会出现上述错误myClass
。
如果这种行为是设计使然,为什么?如果这是一个错误,那么我该如何解决这个问题?生成器和类的名称不同会导致其他隐藏问题吗?
r - R 参考类 - 如何确定你是否在继承的方法中?
对于给定的引用类方法,如何确定它是否被继承?更一般地说,如何确定我的继承树有多远?
例如,如果我的设置是:
理想情况下,我想whosMethod()
给我类似的东西
请注意,这与在上面的示例中class(.self)
总是返回的明显不同。"B"
动机 - 自定义事件
除了方法之外,我希望对其他事物具有类似继承的行为,例如自定义事件。我的方法可能会raise(someEvent)
在实例化过程中传递事件处理程序来处理这些事件,例如
现在,如果一个子类定义了一个已经由父类定义的事件处理程序,那么我需要知道应该覆盖哪个事件处理程序。特别是,如果在子类中methodA()
注册和注册同一个事件,当尝试注册时,我需要知道我在父方法中,以便如果已经注册,我不会覆盖它。handlerA()
someEvent
methodB()
handlerB()
handlerA()
methodA()
handlerB()
能够从子事件处理程序调用父事件处理程序也很好,就像callSuper()
方法可用一样。
r - R 参考类 - 如何扩展生成器对象?
我想扩展一个生成器对象,但是关于这个主题的所有 R 帮助文件都是:
请注意,如果想用子类扩展引用类生成器的能力,这应该通过子类化来完成
refGeneratorSlot
,而不是refObjectGenerator
.
好的,但是您实际上是如何做到的呢?所以我试过:
但现在呢?我如何将它与使用的类定义结合使用setRefClass()
?
r - R 参考类 - 我们应该在构造函数中使用 $initFields 还是 $callSuper ?
关于 R 引用类,如果我们重写默认$initialize()
构造函数,这被认为是初始化字段的更好做法:$initFields()
或者$callSuper()
?
我考虑了一些优点/缺点:
$initialize()
如果在R 的某些未来版本中更改/扩展的默认行为,$callSuper()
将反映这些更改而无需添加/重写代码没有什么能阻止你
$callSuper()
一次调用两次$initialize()
。它是否正式记录/明确定义在这种情况下会发生什么?
r - Roxygen2 - 如何@export 参考类生成器?
例如,假设我调用了以下包Test
并且我想导出类A
:
A
但是,在构建和加载之后,使用's 生成器时出现以下错误:
我检查了我的NAMESPACE
文件的内容是好的:
那么出了什么问题呢?为什么我的类生成器没有被导出?