2010-10-06 8 views
9

Qual è l'idioma in Ruby quando si desidera avere un argomento predefinito per una funzione, ma uno che dipende da un altro parametro/un'altra variabile? Ad esempio, in Python, un esempio è:argomento default ruby ​​idioma

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) 

Qui, se hi non viene fornito, dovrebbe essere len(a). Non è possibile eseguire len(a) nell'elenco di argomenti predefinito, in modo da assegnargli un valore sentinella, Nessuno e verificarlo. Quale sarebbe l'equivalente in Ruby?

risposta

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

cosa succede se si dispone di un ciclo? 'def foo (a = b, b = a)'. o puoi riferirti solo ai vars definiti prima? – Claudiu

+5

Deve venire prima – horseyguy