提问人:Marco De Virgilis 提问时间:3/4/2020 更新时间:3/4/2020 访问量:805
三等号 R
triple equal sign R
问:
我正在尝试创建一个检查严格相等的函数,我想使用三等号。一些背景:
> 3 == '3'
[1] TRUE
> FALSE == 0
[1] TRUE
上述所有检查都会返回,因为输入被强制为通用类型。但是,我想检查严格的平等性。该功能完全符合我的需求。TRUE
identical
> identical(3,'3')
[1] FALSE
> identical(FALSE, 0)
[1] FALSE
现在我想以一种更简洁、更不冗长的方式实现这一点。与 Javascript 一样,我想使用三等号。我写了这个函数:
`===` <- function(a,b){
identical(a,b)
}
但是,这不符合预期:
> 3 === 3
Error: unexpected '=' in "3 ==="
我错过了什么? 谢谢
答:
6赞
Maurits Evers
3/4/2020
#1
您可以定义一个中缀运算符(用 in 表示“equal”;-):e
%e%
`%e%` <- function(a, b) identical(a, b)
3 %e% 3
#[1] TRUE
或者,如果您想要三等号
`%===%` <- function(a, b) identical(a, b)
3 %===% 3
#[1] TRUE
或者一个带有向量的例子
1:3 %===% 1:3
#[1] TRUE
这些中缀操作(在操作数之间使用运算符)也可以写成
`%===%`(1:3, 1:3)
以与写作相同的方式
`==`(3, 3)
评论
0赞
Marco De Virgilis
3/4/2020
我知道我可以使用百分号,但这有点违背了快速输入它的目的。至少在我的键盘上是 shift + 5。我知道我可以重新映射键盘,但在这一点上这有点矫枉过正。有没有办法只使用等号?
1赞
Maurits Evers
3/4/2020
@MarcoDeVirgilis我明白了。不,我认为在使用自定义中缀运算符时无法避免这些符号。如果将其定义为至少,则将具有与%
%e%
===
;-)
2赞
Maurits Evers
3/4/2020
@MarcoDeVirgilis 在更广泛的上下文中可能很有趣:为什么选择 % 作为运算符分隔符
评论
===
%%
data.table
:=
data.table
%
:=
~=
@=
:=