идиома - PullRequest
       29

идиома

10 голосов
/ 06 октября 2010

Какова идиома в Ruby, когда вы хотите иметь аргумент по умолчанию для функции, но тот, который зависит от другого параметра / другой переменной? Например, в Python, например:

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) в списке аргументов по умолчанию, поэтому вы присваиваете ему значение Sentinel, None, и проверяете это. Каким будет эквивалент в Ruby?

1 Ответ

13 голосов
/ 06 октября 2010
def foo(a, l = a.size)
end
...