2011-10-18 12 views

Odpowiedz

5

Tylko faktyczne argumenty są przekazywane do metody. Każda metoda S3 może mieć własne różne wartości domyślne (co byłoby jednak bardzo złym projektem).

Należy starać się mieć te same parametry z tych samych ustawień domyślnych jako funkcję rodzajowy, a następnie ewentualnie jakieś dodatkowe parametry na koniec.

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

Test(list()) 
+0

Dzięki, Tommy. Ta odpowiedź potwierdza to, co widzę, ale zastanawiam się, dlaczego widzimy to zachowanie? Nie jest dla mnie oczywiste, dlaczego parametry domyślne nie są przekazywane? – SFun28

+0

Ponieważ jest zaprojektowany w ten sposób :) ... a poza tym prawdopodobnie nie można sprawdzić "brakujących (rownames)" w swojej metodzie. ... a teraz możesz mieć inne domyślne wartości (zły pomysł). – Tommy

+0

dzięki! Domyślam się, że tak właśnie jest. Rozumiem, że posiadanie różnych domyślnych wartości jest złym pomysłem, ale nie jest dla mnie intuicyjne, że wartości domyślne są ignorowane. Być może muszę zagłębić się w funkcję ogólną. Wydaje się najbardziej intuicyjne, że gdy wykonywany jest UseMethod (...), parametry dopasowanej metody (Test.list w tym przypadku) są dopasowane do parametrów Testu. Tutaj mówimy "dopasuj wszystkie parametry Z WYJĄTKIEM, gdy parametr ma domyślną wartość, jeśli domyślne, ignoruj". Jest to nieco bardziej skomplikowane w ten sposób. =) – SFun28

Powiązane problemy