问题标签 [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.

0 投票
2 回答
1197 浏览

r - R 参考类作为参考类的一个字段

我想将引用类传递给引用类构造函数,并将传递的引用类分配为字段。但是,当我运行下面的代码时,我不明白为什么会出现错误。我的问题是:

1)请有人可以解释为什么会发生此错误:

2) 我已将class.a.container声明为类“列表”,但是我希望这是一个参考类。我需要在这里放什么而不是“列表”?

0 投票
1 回答
433 浏览

r - 参考类的 R 测试

是否有一种快速而肮脏的方法来测试实例是否来自引用类?

标准的 R 对象测试产生以下结果 - 但似乎没有任何东西专门标记参考类。

0 投票
1 回答
984 浏览

r - r 参考类——它们有静态字段成员/变量吗?

我一直在玩一点 R 的 R5 类系统,看看它能做什么,不能做什么。在那个过程中,我偶然发现了看起来像静态类字段成员的东西(它似乎不在文档中 - 但我可能会错过它)

[2014 更新]
警告!!!:以下代码不适用于 R 版本 >= 3.0
这篇文章、其答案,尤其是评论提供了有关 R5 OO 系统和 R 语言的有用见解和提醒。然而,培养直接使用 R5 类实例的环境的习惯可能是一个坏主意。
[2014年底更新]

在下面的代码中,第一个字段是实例字段变量的经典定义。第二个定义似乎是使用访问器方法创建一个静态类字段。我想知道这种用法是否符合犹太教规(或者我的代码示例只是巧合)。第三个字段使用使用访问器方法创建一个准私有的即时字段变量。

如果您运行此代码 - 您可以看到第二个字段变量似乎作为静态类成员运行。对我来说不太清楚的是参考类保留该字段的位置(因此我在上面倒数第二行中的评论)。

0 投票
1 回答
2176 浏览

r - 为 S4 引用类的实例定义默认字段值

如何定义S4 引用类实例的字段默认值?

对于常规 S4 课程,有以下prototype论点:

据我了解的帮助页面,这也应该适用于通过参数setRefClass的 S4 参考类。...相应的部分说:

...要传递给 setClass 的其他参数。

然而prototype似乎没有setClass正确发送到:

或者

我没有在setRefClass.

这是一个错误还是我在这里遗漏了一些明显的东西?


编辑

我能找到的最接近的可以帮助我声明默认值的是$initFields().

这就是?setRefClass不得不说的:

从提供的参数初始化对象的字段。此方法通常仅从具有 $initialize() 方法的类调用。它对应于引用类的默认初始化。如果有插槽和非引用超类,这些也可以在 ... 参数中提供。

通常,一个专门的 $initialize() 方法执行它自己的计算,然后调用 $initFields() 来执行标准初始化,如下面示例中的 matrixViewer 类所示。

到现在为止还挺好

适用于“默认初始化案例”:

但是,如果无法处理在初始化时明确指定(某些)字段值的情况:

解决方法

真的很脏,但它的工作原理

初始化

这就是我正在寻找的东西,但我确定还有更多“内置”的东西?


编辑 2

整个事情有点通用。方法ensureDefaultValues可以是每个其他类继承自的类的方法。对于“继承路径更远”的类,可以简单地在方法内调用此intialize方法:

0 投票
2 回答
1122 浏览

r - 在R中的引用类中设置全局变量

在阅读了很多堆栈溢出问题后,我对全局变量赋值有点困惑。我已经研究过 R 中的全局变量和其他类似的问题

我有以下情况。我有 2 个全局变量current_idxprevious_idx. 这两个全局变量由引用类中的方法设置。

本质上,使用<<-赋值运算符应该可以正常工作吗?但是,我收到了这个警告

我哪里错了?

编辑

使用assign(current_idx, index, envir = .GlobalEnv)作品,即我没有收到警告。有人可以对此有所了解。

0 投票
1 回答
443 浏览

r - 在其他两个引用类对象之间传递对引用类对象的引用(足球示例)

我试图通过以下示例在其他两个参考类对象(例如,两个足球 [football] 球员)之间“传递”对参考类对象(例如球)的引用:

但是我收到以下错误:

从理论上讲,我试图重新引用对球对象的引用,然后将该引用添加到其他玩家,但显然这不起作用。我知道可以通过直接访问字段来获得相同的结果,但我想找到一种方法来仅使用类的内部方法来完成此“通过”。这可能吗?为什么我会收到此错误?

0 投票
1 回答
821 浏览

r - R setRefClass 访问器

我创建了一个setRefClass, 我想知道如何实现访问器,以便在创建此类的新实例时可以使用setXXX,访问字段getXXX。我正在考虑使用.self$accessors(names(.self$fields()))in initialize 方法,但它似乎不起作用。

0 投票
1 回答
317 浏览

r - 如何检查参考类中的字段分配

我有一个关于参考类的问题。如何检查字段分配。

这是我的示例代码:

我的问题是如何防止它,设置“test$firstValue <- 11”而不检查值。在 S4 中,我会这样解决它:

最后,在“A”的类定义中,“ validity = function(object){ ... }”将被放置。但是我怎么能用参考类来解决这个问题呢?

感谢帮助。

0 投票
2 回答
260 浏览

r - R中函数的运算符重载 - 奇怪的行为

不幸的是,像(f+g)(3)f 和 g 都是一元函数这样的事情在 R 中不起作用。因此,我尝试通过以下方式重载一元函数的“+”运算符:

但是,如果我尝试使用它,这将无济于事。编码

+.function产生与 if甚至没有定义相同的错误。

玩了一段时间后,我发现实际上有可能以这种方式添加函数:如果函数是引用类的成员函数,那就行了!即,以下代码(连同上面的“+”定义)

返回“8”(如预期的那样)。因此,对于我的问题,我已经有了某种解决方法。现在我的问题是:

这种奇怪行为的原因是什么?为什么不+.function关心“普通”函数而是类成员函数?有谁知道如何将运算符“扩展”到常用功能?

0 投票
1 回答
200 浏览

r - 在检索 S4 参考类的字段值时避免考虑封闭帧

我是 S4 参考类的忠实粉丝,因为它们允许混合编程风格(函数式/按值传递与 oop/按引用传递;示例),从而显着提高灵活性。

但是,当您要求 R 通过方法检索某个字段值时,我认为我只是遇到了一种关于 R 扫描环境/框架的方式的不良行为$field()(请参阅帮助页面)。问题是,如果在实际的本地/目标环境(这将是构成 S4 参考类的环境)中找不到所需的字段,R 似乎也会查看封闭环境/框架,即它就像运行get(<objname>, inherits=TRUE)(参见帮助页)。

实际问题

为了让 R 只在本地/目标环境中查看,我在想类似的东西,$field(name="<fieldname>", inherits=FALSE)$field()没有一个...参数可以让我传递inherits=FALSEget()(我猜这在路上的某个地方被称为)。有解决方法吗?


代码示例

对于那些对更多细节感兴趣的人:这是一个说明行为的小代码示例

aclass 中有一个字段A,因此在目标环境中找到并返回值:

如果我们尝试访问的字段不是引用类的字段,但恰好与工作区/搜索路径中的某个其他对象的名称相同(在这种情况下"lm"),事情看起来会有所不同:

在这一点上并不是我所期望的。恕我直言,一个错误或至少一个警告会好得多。或者打开$field()参数的方法,可以通过.... get()我猜在调用时会调用沿途的某个地方$field(),所以这样的事情可能会阻止上述行为的发生:


解决方法:自己的建议

这应该可以解决问题,但也许有一些更优雅的东西不涉及在顶部的新方法的规范$field()