2010-10-06 11 views
9

Jaki jest idiom w Ruby, jeśli chcesz mieć domyślny argument funkcji, ale taki, który zależy od innego parametru/innej zmiennej? Na przykład w Pythonie, przykładem jest:domyślny argument ruby ​​

def insort_right(a, x, lo=0, hi=None): 
    if hi is None: 
     hi = len(a) 
    while lo < hi: 
     mid = (lo+hi)//2 
     if x < a[mid]: hi = mid 
     else: lo = mid+1 
    a.insert(lo, x) 

Tutaj, jeśli hi nie jest dostarczany, powinno być len(a). Nie możesz wykonać len(a) na domyślnej liście argumentów, więc przypiszesz jej wartość wartownika, Brak, i sprawdź, czy nie jest. Jaki byłby odpowiednik w Ruby?

Odpowiedz

13
def foo(a, l = a.size) 
end 
+0

co się stanie, jeśli masz pętlę? 'def foo (a = b, b = a)'. czy może odnosić się tylko do zdefiniowanych wcześniej zmiennych? – Claudiu

+5

Musi przyjść wcześniej – horseyguy

Powiązane problemy