2010-10-06 42 views
9

Thành ngữ trong Ruby là gì khi bạn muốn có đối số mặc định cho hàm, nhưng một thuộc tính phụ thuộc vào tham số khác/biến khác? Ví dụ, trong Python, một ví dụ là:ruby ​​đối số mặc định thành ngữ

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) 

Ở đây, nếu hi không được cung cấp, nó phải là len(a). Bạn không thể làm len(a) trong danh sách đối số mặc định, vì vậy bạn chỉ định cho nó giá trị sentinel, None và kiểm tra điều đó. Điều gì tương đương với Ruby?

Trả lời

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

điều gì sẽ xảy ra nếu bạn có vòng lặp? 'def foo (a = b, b = a)'. hoặc bạn chỉ có thể tham khảo các vars được xác định trước đó? – Claudiu

+5

Phải đến trước – horseyguy

Các vấn đề liên quan