Я написал бинарную операторную функцию для R (, т.е. с именем вроде %X%
, чтобы вместо ввода %X%(a,b)
я мог использовать более удобный синтаксис a %X% b
. Моя цель состоит в том, чтобы иметь оболочку для <-
, которая делает такие вещи, как журнал того, что было сделано с объектами в этой среде, и проверяет наличие «защищенного» атрибута, который предупреждал бы пользователя перед перезаписью этого объекта.
Все это работает, за исключением того, что если я попытаюсь сделать что-то вроде a %X% b + c
внутри функции, все, что вы увидите, этоa %X% b
_и это все, что он делает; a получает значение b, а c полностью игнорируется. a %X% (b + c)
работает, как и %X%(a, b + c)
, но весь смысл написания этого как бинарного оператора состоит в том, чтобы избежать круглых скобок.
Если я перезапишу <-
, его sys.call()
увидит все слева и справа от него. Почему мой видит только соседние имена из командной строки?
Вот код, который воспроизводит эту проблему:
`%X%` <- function(...){
print(deparse(sys.call()));
}
a %X% 3 + 1:10;
Желаемый результат: "%X% 3 + 1 :10" Наблюдаемый результат: "%X% 3"
. Спасибо.