在R中过载Ampersand&operator

Wil*_*nao 2 polymorphism r ampersand

我喜欢用粘贴重载我的&符号运算符.这样我就可以轻松粘贴东西了.像这样:

R> "Hello" & " World"
 [1] "Hello World"
Run Code Online (Sandbox Code Playgroud)

我实现这一目标的方式是:

"&" <- function(...){paste(..., sep = "")}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,花花公子,但你失去了使用&符作为自然"和"操作符的能力.什么是最好,最快速的最美妙的方式来重载我的&符号,以便它识别何时输入是合乎逻辑的?

TRUE & FALSE == FALSE
Run Code Online (Sandbox Code Playgroud)

等等

Sco*_*hie 5

您需要在R中使用S3对象系统:

`&` <- function(e1, e2) UseMethod("&", c(e1, e2))
`&.default` <- function(e1, e2) paste(e1, e2)
`&.logical` <- function(e1, e2) .Primitive("&")(e1, e2)
Run Code Online (Sandbox Code Playgroud)

现在您可以&按照您的预期使用:

> 1 & 2
[1] "1 2"
> TRUE & FALSE
[1] FALSE
> "Hello" & "World"
[1] "Hello World"
> 
Run Code Online (Sandbox Code Playgroud)

  • `default`行为应该是逻辑的,而paste方法只适用于`character`吗?似乎更安全. (5认同)