При определении классов R имеет какое-либо понятие частных или открытых слотов?
Если в языке нет строгой функции, существует ли общая схема именования?
При определении классов R имеет какое-либо понятие частных или открытых слотов?
Если в языке нет строгой функции, существует ли общая схема именования?
ИЗМЕНИТЬ:
Чтобы дать немного истории: в функции setClass был предоставлен вариант "доступ" для создания так называемых "привилегированных слотов", к которым можно было получить доступ только через геттеры и сеттеры, предоставляемые классом. Это позволило бы создавать частные слоты (не предоставляя геттер), но эта функция никогда не была реализована. Страница справки ?setClass
в настоящее время читает:
доступ и версия, включенная для совместимости с S-Plus, но в настоящее время игнорируется.
Таким образом, нет таких вещей, как частные и общедоступные слоты, так как через обозначение @
каждый слот доступен. И лично я очень доволен этим, так как он позволяет мне использовать информацию из объектов, которые труднодоступны, используя геттеры и сеттеры, включенные в пакет. Это также позволяет мне экономить тяжелые расчеты, избегая накладных расходов, создаваемых геттерами и сеттерами.
Мне не известно ни одного соглашения об именах для проведения различия между общедоступными и "private" слотами. Вы можете сделать различие для себя, предшествовав слову "private" точкой, но это не влияет на поведение этих слотов. Это также не обычная практика, так как большинство программистов R не заботятся о публичных и частных слотах. Они просто не предоставляют геттеры и сеттеры для слотов, которые средний пользователь не должен достичь.
Чтобы дать тривиальный пример: следующее создает класс с двумя слотами, а также геттер и сеттер только для одного слота.
setClass("Example",
representation(
aslot = "numeric",
.ahiddenslot = "character"
)
)
setGeneric("aslot", function(x) standardGeneric("aslot"))
setMethod("aslot","Example",function(x){
[email protected]
})
setGeneric("aslot<-", function(x,value) standardGeneric("aslot<-"))
setMethod("aslot<-","Example",function(x,value){
[email protected] <- value
x
})
Вы также можете установить метод show
, который просто не распечатывает скрытый слот:
setMethod("show","Example",function(object){
cat("Example with value for aslot: ", [email protected],"\n")
})
Это дает следующее нормальное использование:
> X <- new("Example",aslot=1,.ahiddenslot="b")
> X
Example with value for aslot: 1
> aslot(X)
[1] 1
> aslot(X) <- 3
Но хадиднслот по-прежнему доступен:
> slot(X,".ahiddenslot")
[1] "b"