Почему print класса S4 вызывает `show` без пространства имен?
У меня есть посылка shinyjs
с функцией под названием show
, Сегодня пользователь сообщил мне, что это создает проблемы при использовании объектов S4, потому что "печать"- объект S4 использует show
метод, который маскируется моим пакетом, когда он прикреплен.
Пример:
library(shinyjs)
setClass("testS4Object",
representation(
ID = "numeric",
Name = "character"
),
prototype(
ID = NA_real_,
Name = NA_character_
)
)
x = new("testS4Object")
x
Там есть ошибка, потому что, когда мы печатаем значение x
кажется звонит show
под сценой, но он использует shinyjs::show
вместо methods::show
, Печатью methods::show(x)
явно проблема уходит. Но я немного запутался, почему по умолчанию система печати S4 вызывает show
без пространства имен - разве это не опасно и не виновата ли моя посылка в том, что эта ошибка происходит?
Считается очень плохой идеей иметь функцию с тем же именем, что и функция в methods
? Я думаю, что система S4 должна знать, чтобы позвонить своим show
функция или унаследованный S4 show
функция.
РЕДАКТИРОВАТЬ: Я спросил Хэдли, что он думает, и он, кажется, также думает, что это может быть ошибкой в R, я написал R-Devel, чтобы узнать их мнение
1 ответ
О проблеме сообщили в основной команде R, и она была исправлена в 2015-07-20 в коммите SVN # 68702. Вот исправление
Исправление будет доступно в R 3.3.0