2011-10-18 25 views

cevap

5

sadece gerçek argümanlar yönteme geçirilir. Her S3 yönteminin kendi farklı varsayılan değerleri olabilir (bununla birlikte çok kötü bir tasarım olurdu).

Sonuna bazı ekstra parametreleri muhtemelen daha sonra aynı parametreleri jenerik işleviyle aynı varsayılan ile olması çalışıyoruz ve olmalıdır.

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

Test(list()) 
+0

Teşekkürler, Tommy. Bu cevap, ne gördüğümü doğruluyor, ama bu davranışı neden gördüğümüzü merak ediyorum. Varsayılan parametrelerin neden aktarılmadığı bana açık değil mi? – SFun28

+0

Bu şekilde tasarlandığından :) ... ve aksi takdirde muhtemelen yönteminizde "eksik" (rownames) 'i kontrol edemediniz. ... ve şimdi diğer varsayılan değerlere sahip olmakta özgürsünüz (kötü fikir olsa da). – Tommy

+0

teşekkürler! Sanırım ne olduğu. Farklı varsayılan değerlere sahip olmanın kötü bir fikir olduğunu, benim için varsayılan değerlerin göz ardı edilmesinin sadece sezgisel olmadığını anlıyorum. Belki de genel işlevlere daha çok inmem gerekiyor. UseMethod (...) yürütüldüğünde, eşleşen yöntemin parametreleri (bu durumda Test.list) Test parametrelerine kadar eşleştirilir. Burada "parametre varsayılan bir değer olduğunda, tüm parametrelerle eşleşiriz. Varsayılan olarak, yoksay" dedik. Sadece biraz daha karmaşık bu şekilde ifade etti. =) – SFun28

İlgili konular