5
Cercando di capire perché Rownames = FALSE non viene passato da Test a Test.list?Perché i valori predefiniti non vengono inviati con UseMethod?
Test = function(object , rownames = FALSE , ...)
{
UseMethod("Test")
}
Test.list = function(object , rownames , ...)
{
browser()
# rownames is missing!
}
Test(list())
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
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
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