Ho una funzione generica denominata foo
. Funziona in modo diverso sulle classi bar
e baz
ma esiste una pre-elaborazione condivisa che deve essere eseguita una sola volta. Qual è il modo idiomatico di portarlo fuori?R pattern per modificare gli argomenti passati alla funzione generica
Nel mio stupido esempio qui sotto, voglio moltiplicare l'oggetto che viene passato al generico di 10. Tuttavia, quando viene chiamato il metodo, il valore originale viene stampato sulla console. Ho letto la definizione della lingua e so che il pattern sottostante non funziona. La mia domanda è: dove o come dovrei gestire l'elaborazione condivisa di argomenti generici prima di chiamare il metodo?
a <- structure(1:5, class="bar")
b <- structure(6:10, class="baz")
foo <- function(x) {
x <- x * 10 # where should shared preprocessing go?
UseMethod("foo")
}
foo.bar <- function(x) {
cat("Foo!", x)
}
foo.baz <- function(x) {
cat("Baz!", x)
}
# does not propagate the operations carried out `foo`
foo(a)
foo(b)
Anche se non elegante, vorrei solo scegliere il percorso evidente e digitare nuovamente la parte di pre-elaborazione sia in '' foo.bar' e foo.baz'. In alternativa, definire una funzione che fa la parte comune (senza esportarla): '.preprocess <-function (x) #do stuff' e quindi' foo.bar <-function (x) {x <-. Preprocess (x) ; #do altre cose} 'e lo stesso per' foo.baz'. – nicola