2011-03-09 24 views
20

Bunun ne anlama geldiğini biliyorum:çıplak yıldız: def f (*)

def f(*args) 
    ... 
end 

Ama bu demek ve neden bunu kullanmak isterdi? Adlandırılmış parametrelerle de görünebilir mi?

def f(*) 
    ... 
end 

cevap

35

def f(*) o globbed argüman dizisi adını etmemesi dışında def f(*args) aynı etkiye sahiptir. Fonksiyonun herhangi bir sayıdaki argümanı kabul etmesini istiyorsanız, ancak aslında fonksiyonda onlara başvurmak istemiyorsanız kullanabilirsiniz - örneğin, bir yöntemi geçersiz kılarsanız ancak super'u açık bir argüman listesi geçmeden çağırıyorsanız Özgün argümanlar super'a iletilir. Ayrıca, def f(a, b, *) yazabilirsiniz.

+0

+1, teşekkürler! Bunun için herhangi bir alıntı ya da yetkin var mı? _Not Very Well Publicized_ (tm) gibi görünüyor. – pilcrow

+1

Çok iyi tanıtılmadı çünkü genellikle '(* args)' kullanırdık. Bu Ruby yoludur. –

+0

@pilcrow: Argümanlara sahip olmak, ancak bunların hiçbirini kullanmamak, hafif bir kod kokusu olacaktır, bu yüzden iyi bir şekilde yayınlanmayacaktır. –