2010-10-06 12 views
9

Was ist das Idiom in Ruby, wenn Sie ein Standardargument für eine Funktion haben wollen, aber eines, das von einem anderen Parameter/einer anderen Variablen abhängig ist? Zum Beispiel in Python, ein Beispiel ist:Rubin Standardargument Idiom

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) 

Wenn hier hi nicht geliefert wird, soll es len(a) sein. Sie können len(a) nicht in der Standardargumentliste verwenden, daher weisen Sie ihm einen Sentinel-Wert None zu und prüfen, ob das der Fall ist. Was wäre das Äquivalent in Ruby?

Antwort

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

Was passiert, wenn Sie eine Schleife haben? 'def foo (a = b, b = a)'. Oder können Sie nur auf zuvor definierte Variablen verweisen? – Claudiu

+5

Muss vorher kommen – horseyguy