Quando si definiscono le classi, R ha qualche nozione di slot privato vs pubblico?Slot pubblici e privati in R?
Se nella lingua non esiste una funzione specifica, esiste uno schema di denominazione comune?
Quando si definiscono le classi, R ha qualche nozione di slot privato vs pubblico?Slot pubblici e privati in R?
Se nella lingua non esiste una funzione specifica, esiste uno schema di denominazione comune?
EDIT:
Per dare un po 'di storia: Negli setClass funzione 'accesso' un'opzione è stato fornito per creare le cosiddette 'slot privilegiati' che potrebbero essere raggiunte solo attraverso getter e setter fornite con la classe . Ciò consentirebbe di creare slot privati (non fornendo un getter), ma questa funzione non è mai stata implementata. La pagina di aiuto di ?setClass
attualmente recita:
l'accesso e la versione, inclusi per la compatibilità con S-Plus, ma attualmente ignorato.
Quindi non v'è alcuna cosa come slot privati e pubblici, come attraverso la notazione @
ogni slot è raggiungibile. E personalmente sono molto contento di questo, in quanto mi consente di utilizzare le informazioni di oggetti che non sono facilmente raggiungibili utilizzando i getter ei setter inclusi nel pacchetto. Mi consente inoltre di economizzare i calcoli pesanti evitando i costi generali creati dai getter e dai setter.
Non sono a conoscenza di alcuna convenzione di denominazione per fare una distinzione tra spazi pubblici e "privati". Puoi fare la differenza per te stesso precedendo gli slot "privati" con un punto, ma ciò non ha alcun effetto sul comportamento di tali slot. Inoltre, non è una pratica comune, poiché la maggior parte dei programmatori R non si preoccupa delle slot pubbliche e private. Semplicemente non forniscono getter e setter per slot che l'utente medio non dovrebbe raggiungere.
Per dare un esempio banale: quanto segue crea una classe con due slot e un getter e setter per un solo slot.
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
})
È anche possibile impostare un metodo show
che proprio non stampare la fessura nascosta:
setMethod("show","Example",function(object){
cat("Example with value for aslot: ", [email protected],"\n")
})
Questo dà il seguente uso normale:
> X <- new("Example",aslot=1,.ahiddenslot="b")
> X
Example with value for aslot: 1
> aslot(X)
[1] 1
> aslot(X) <- 3
Ma la .ahiddenslot è ancora raggiungibile:
> slot(X,".ahiddenslot")
[1] "b"
T lui nomina convenzione di un "." ha senso, in quanto penso che per lo più mi aiuterà a mantenere le cose dritte in base alle mie intenzioni facendo la distinzione. Non mi interessa davvero se sono protetti. –