2010-10-06 72 views
9

當你想要一個函數的默認參數,但是依賴於另一個參數/另一個變量的時候,Ruby中的習慣用法是什麼?例如,在Python,一個例子是: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) 

在這裏,如果沒有提供hi,它應該是len(a)。在默認參數列表中,您不能執行len(a),因此您爲其指定一個標記值None,然後檢查它。 Ruby中的等價物是什麼?

回答

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

如果你有循環會發生什麼? 'def foo(a = b,b = a)'。或者你只能參考之前定義的變量? – Claudiu 2010-10-06 19:09:03

+5

必須提前 – horseyguy 2010-10-06 19:11:27