тройной знак равенства R - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь создать функцию, которая проверяет строгое равенство, и я хотел бы использовать тройной знак равенства. Некоторый контекст:

> 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 ==="

Чего мне не хватает? Спасибо

1 Ответ

6 голосов
/ 04 марта 2020

Вы можете определить инфиксный оператор (с 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)
...