r - 我怎样才能让`==`总是评估为`TRUE`?
问题描述
这也许是一个不寻常的问题。我想知道是否有可能y
在 R 中创建一个x == y
总是评估为的对象TRUE
,或者可能NA
(例如,如果x
是NA
),无论x
.
如有必要,y
也可以是函数调用y()
。
我能想到的解决此类问题的唯一方法是使用sys.call()
or sys.calls()
,但到目前为止,我对这种方法没有运气。
注意,我不知道你为什么需要这种行为,我只是想知道它是否可以做到。
解决方案
我不知道一种非作弊的方式——你检查调用堆栈的方法很有希望,但没有明显的(对我来说)在调用堆栈中找到调用表达式的方法,所以我无法让它工作。
但是如果我们愿意作弊,我们可以很容易地做到这一点:每个运算符都可以在 R 中被覆盖,因此您可以根据需要重新定义==
。
也许(稍微)更实际有用,您可以覆盖(组)特定类的泛型。TRUE
因此,您可以定义一个具有与任何其他值进行比较所需的语义的类:
# `==` is part of the `Ops` S3 group generic.
Ops.tautology = function (x, y) TRUE
y = structure(list(), class = 'tautology')
1 == y
# [1] TRUE
2 == y
# [1] TRUE
NA == y
# [1] TRUE
组泛型的这种定义在实践中过于简单:它还重新定义了+
并且基本上所有其他标准二元运算符。我们可能想直接发送,==
但因为无论如何这是一个 hack,增加的复杂性并不值得。
推荐阅读
- java - 使用 formatDate 的 jsp 错误
- javascript - 在参数之前路由extjs?
- bash - 如何使shell脚本中的exec命令在不同的进程中运行?
- c# - 实体框架只插入一条记录
- selenium - 如何在使用 selenium 库的机器人框架中解决“不推荐使用没有显式属性的'使用'获取元素属性'”
- javascript - 如何从隐藏或显示中获取值:使用 javascript 无输入
- git - 文件被部署到heroku,但是bash命令没有显示文件
- r - 使用 kableExtra 将分组变量与剥离/着色匹配
- c# - C#:如何拆分具有变化前缀的字符串
- ruby - 确定字符串的结尾是否与单独字符串的开头重叠