2011-10-18 17 views

risposta

5

Solo gli argomenti effettivi vengono passati al metodo. Ogni metodo S3 può avere i propri valori predefiniti diversi (il che sarebbe comunque un pessimo design).

Si dovrebbe cercare di avere gli stessi parametri con le stesse impostazioni predefinite come la funzione generica, e poi eventualmente alcuni parametri extra alla fine.

# Bad design, but possible to have defaults be different... 
Test.list = function(object , rownames = TRUE , ...) 
{ 
    browser() 
    # rownames is TRUE! 
} 

Test(list()) 
+0

Grazie, Tommy. Questa risposta conferma quello che sto vedendo, ma mi chiedo perché vediamo questo comportamento? Non è ovvio per quale motivo i parametri di default non vengono trasmessi? – SFun28

+0

Perché è progettato in questo modo :) ... e in caso contrario probabilmente non è possibile verificare la presenza di "missing (Rownames)" nel metodo. ... e ora sei libero di avere altri valori predefiniti (cattiva idea però). – Tommy

+0

grazie! Immagino sia quello che è. Capisco che avere valori predefiniti diversi sia una cattiva idea, ma non mi sembra intuitivo che i valori predefiniti vengano ignorati. Forse ho bisogno di scavare più a fondo nella funzione generica. Sembra molto intuitivo che quando viene eseguito UseMethod (...), i parametri del metodo corrispondente (Test.list in questo caso) siano abbinati ai parametri di Test. Qui stiamo dicendo "abbina tutti i parametri ECCETTO quando il parametro ha un valore di default, se impostato per default ignora". È solo un po 'più complicato dichiarato in questo modo. =) – SFun28

Problemi correlati