gpt4 book ai didi

ruby - 为什么这个 splat 方法调用在 Ruby 中不起作用?

转载 作者:数据小太阳 更新时间:2023-10-29 07:27:04 25 4
gpt4 key购买 nike

def method(a, b='a', c, *d)
[a,b,c, d]
end

p method(1,2,3,4)

不工作,我不明白为什么,如果我们删除 b 参数一切正常。语法规则说您可以将具有默认值的参数放在 splat 参数之前。

最佳答案

只要具有默认值的变量可以被解释为(唯一的)splat 的初始元素,具有默认值的变量和 splat 变量就可以存在并共存。

因此,这些都可以工作:

def good(a = :a, b);      [a,b];    end
def good(a = :a, *b); [a,b]; end
def good(a, b = :b, *c); [a,b,c]; end

但这些不会:

def bad(*a, b = :b);          [a,b];    end  # default after the splat
def bad(a = :a, b, c = :c); [a,b,c]; end # parsing would need two splats
def bad(a = :a, b, *c); [a,b,c]; end # parsing would need two splats
def bad(*a, b = :b, c); [a,b,c]; end # default after the splat

(老实说,我不知道是什么实现细节阻止 Ruby 在 splat 后立即接受默认值,前提是没有歧义。但我猜这是为了避免在 splat 上循环两次而不是一次,即性能,并且可能还有其他原因可能与 Ruby 计算方法的元数的方式有关。)

关于ruby - 为什么这个 splat 方法调用在 Ruby 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com