问题标签 [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 - R 参考类作为参考类的一个字段
我想将引用类传递给引用类构造函数,并将传递的引用类分配为字段。但是,当我运行下面的代码时,我不明白为什么会出现错误。我的问题是:
1)请有人可以解释为什么会发生此错误:
2) 我已将class.a.container声明为类“列表”,但是我希望这是一个参考类。我需要在这里放什么而不是“列表”?
r - 参考类的 R 测试
是否有一种快速而肮脏的方法来测试实例是否来自引用类?
标准的 R 对象测试产生以下结果 - 但似乎没有任何东西专门标记参考类。
r - r 参考类——它们有静态字段成员/变量吗?
我一直在玩一点 R 的 R5 类系统,看看它能做什么,不能做什么。在那个过程中,我偶然发现了看起来像静态类字段成员的东西(它似乎不在文档中 - 但我可能会错过它)
[2014 更新]
警告!!!:以下代码不适用于 R 版本 >= 3.0
这篇文章、其答案,尤其是评论提供了有关 R5 OO 系统和 R 语言的有用见解和提醒。然而,培养直接使用 R5 类实例的环境的习惯可能是一个坏主意。
[2014年底更新]
在下面的代码中,第一个字段是实例字段变量的经典定义。第二个定义似乎是使用访问器方法创建一个静态类字段。我想知道这种用法是否符合犹太教规(或者我的代码示例只是巧合)。第三个字段使用使用访问器方法创建一个准私有的即时字段变量。
如果您运行此代码 - 您可以看到第二个字段变量似乎作为静态类成员运行。对我来说不太清楚的是参考类保留该字段的位置(因此我在上面倒数第二行中的评论)。
r - 为 S4 引用类的实例定义默认字段值
如何定义S4 引用类实例的字段默认值?
对于常规 S4 课程,有以下prototype
论点:
据我了解的帮助页面,这也应该适用于通过参数setRefClass
的 S4 参考类。...
相应的部分说:
...要传递给 setClass 的其他参数。
然而prototype
似乎没有setClass
正确发送到:
或者
我没有在setRefClass
.
这是一个错误还是我在这里遗漏了一些明显的东西?
编辑
我能找到的最接近的可以帮助我声明默认值的是$initFields()
.
这就是?setRefClass
不得不说的:
从提供的参数初始化对象的字段。此方法通常仅从具有 $initialize() 方法的类调用。它对应于引用类的默认初始化。如果有插槽和非引用超类,这些也可以在 ... 参数中提供。
通常,一个专门的 $initialize() 方法执行它自己的计算,然后调用 $initFields() 来执行标准初始化,如下面示例中的 matrixViewer 类所示。
到现在为止还挺好
适用于“默认初始化案例”:
但是,如果无法处理在初始化时明确指定(某些)字段值的情况:
解决方法
真的很脏,但它的工作原理
初始化
这就是我正在寻找的东西,但我确定还有更多“内置”的东西?
编辑 2
整个事情有点通用。方法ensureDefaultValues
可以是每个其他类继承自的类的方法。对于“继承路径更远”的类,可以简单地在方法内调用此intialize
方法:
r - 在R中的引用类中设置全局变量
在阅读了很多堆栈溢出问题后,我对全局变量赋值有点困惑。我已经研究过 R 中的全局变量和其他类似的问题
我有以下情况。我有 2 个全局变量current_idx
和previous_idx
. 这两个全局变量由引用类中的方法设置。
本质上,使用<<-
赋值运算符应该可以正常工作吗?但是,我收到了这个警告
我哪里错了?
编辑
使用assign(current_idx, index, envir = .GlobalEnv)
作品,即我没有收到警告。有人可以对此有所了解。
r - 在其他两个引用类对象之间传递对引用类对象的引用(足球示例)
我试图通过以下示例在其他两个参考类对象(例如,两个足球 [football] 球员)之间“传递”对参考类对象(例如球)的引用:
但是我收到以下错误:
从理论上讲,我试图重新引用对球对象的引用,然后将该引用添加到其他玩家,但显然这不起作用。我知道可以通过直接访问字段来获得相同的结果,但我想找到一种方法来仅使用类的内部方法来完成此“通过”。这可能吗?为什么我会收到此错误?
r - R setRefClass 访问器
我创建了一个setRefClass
, 我想知道如何实现访问器,以便在创建此类的新实例时可以使用setXXX
,访问字段getXXX
。我正在考虑使用.self$accessors(names(.self$fields()))
in initialize 方法,但它似乎不起作用。
r - 如何检查参考类中的字段分配
我有一个关于参考类的问题。如何检查字段分配。
这是我的示例代码:
我的问题是如何防止它,设置“test$firstValue <- 11”而不检查值。在 S4 中,我会这样解决它:
最后,在“A”的类定义中,“ validity = function(object){ ... }
”将被放置。但是我怎么能用参考类来解决这个问题呢?
感谢帮助。
r - R中函数的运算符重载 - 奇怪的行为
不幸的是,像(f+g)(3)
f 和 g 都是一元函数这样的事情在 R 中不起作用。因此,我尝试通过以下方式重载一元函数的“+”运算符:
但是,如果我尝试使用它,这将无济于事。编码
+.function
产生与 if甚至没有定义相同的错误。
玩了一段时间后,我发现实际上有可能以这种方式添加函数:如果函数是引用类的成员函数,那就行了!即,以下代码(连同上面的“+”定义)
返回“8”(如预期的那样)。因此,对于我的问题,我已经有了某种解决方法。现在我的问题是:
这种奇怪行为的原因是什么?为什么不+.function
关心“普通”函数而是类成员函数?有谁知道如何将运算符“扩展”到常用功能?
r - 在检索 S4 参考类的字段值时避免考虑封闭帧
我是 S4 参考类的忠实粉丝,因为它们允许混合编程风格(函数式/按值传递与 oop/按引用传递;示例),从而显着提高灵活性。
但是,当您要求 R 通过方法检索某个字段值时,我认为我只是遇到了一种关于 R 扫描环境/框架的方式的不良行为$field()
(请参阅帮助页面)。问题是,如果在实际的本地/目标环境(这将是构成 S4 参考类的环境)中找不到所需的字段,R 似乎也会查看封闭环境/框架,即它就像运行get(<objname>, inherits=TRUE)
(参见帮助页)。
实际问题
为了让 R 只在本地/目标环境中查看,我在想类似的东西,$field(name="<fieldname>", inherits=FALSE)
但$field()
没有一个...
参数可以让我传递inherits=FALSE
到get()
(我猜这在路上的某个地方被称为)。有解决方法吗?
代码示例
对于那些对更多细节感兴趣的人:这是一个说明行为的小代码示例
a
class 中有一个字段A
,因此在目标环境中找到并返回值:
如果我们尝试访问的字段不是引用类的字段,但恰好与工作区/搜索路径中的某个其他对象的名称相同(在这种情况下"lm"
),事情看起来会有所不同:
在这一点上并不是我所期望的。恕我直言,一个错误或至少一个警告会好得多。或者打开$field()
参数的方法,可以通过...
. get()
我猜在调用时会调用沿途的某个地方$field()
,所以这样的事情可能会阻止上述行为的发生:
解决方法:自己的建议
这应该可以解决问题,但也许有一些更优雅的东西不涉及在顶部的新方法的规范$field()
: