Классы s4 экспортируются по умолчанию при наличии метода инициализации

Я думал, что классы нуждаются в директиве exportClass в NAMESPACE для экспорта,

но

Классы, определенные в пакете, но не экспортируемые, тем не менее экспортируются, если в базе кода есть метод инициализации для класса.

то есть я могу создать экземпляр события класса, хотя я ничего не экспортировал.

так

setClass("example", slots = c( title = "string"))
setClass("example2", slots = c( title = "string"))

а также

setMethod("initialize","example, function(.Object, title) {
 .Object@title <- title
 . Object
}) 

в каталоге пакета R и NAMESPACE присутствуют, но без директив экспорта в нем,

приводит к возможности создать экземпляр класса

library(example_package)
new("example") # ok
new("example2") # fails

Я думаю, это потому, что инициализация - это обобщение, которое уже определено

но значит ли это, что вы не можете предотвратить создание экземпляра класса пользователем пакета, если для класса есть метод инициализации?

или, может быть, положить инициализацию внутри инструкции setClass?

0 ответов

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