ruby 默认参数成语

Posted

技术标签:

【中文标题】ruby 默认参数成语【英文标题】:ruby default argument idiom 【发布时间】:2011-04-22 00:21:57 【问题描述】:

当你想要一个函数的默认参数但依赖于另一个参数/另一个变量时,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),所以你给它分配了一个标记值,None,并检查它。 Ruby 中的等价物是什么?

【问题讨论】:

【参考方案1】:
def foo(a, l = a.size)
end

【讨论】:

如果有循环会发生什么? def foo(a=b, b=a)。还是只能引用之前定义的变量?

以上是关于ruby 默认参数成语的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Ruby 中使用默认参数定义块?

如何在 Ruby 中为 splat 参数设置默认值

Ruby:lambda 函数参数可以有默认值吗?

Ruby:如何获取可选 proc 参数的默认值

如何在子类中添加命名参数或在 Ruby 2.2 中更改它们的默认值?

用不同的参数和默认值在 Ruby 中初始化类的最有效方法是啥?