Почему 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

Другие вопросы по тегам