Ruby 散列中的符号键有时类似于关键字参数,有时则不同

Ruby 散列中的符号键有时类似于关键字参数,有时则不同,ruby,block,keyword-argument,Ruby,Block,Keyword Argument,散列中的符号键的处理方式似乎与关键字参数的处理方式类似,因为给定具有符号键的散列 a = [{a: 1, b: 2}, {a: 3, b: 4}] 此表达式中的关键字块参数引用了相应的值: a.each{|a:, b:| ...} 另一方面,此表达式中的关键字参数出现在括号内: a.each_with_index{|(a:, b:), i| ...} 导致语法错误: unexpected tLABEL a.each_with_index{|(a:, b:), i| }

散列中的符号键的处理方式似乎与关键字参数的处理方式类似,因为给定具有符号键的散列

a = [{a: 1, b: 2}, {a: 3, b: 4}]
此表达式中的关键字块参数引用了相应的值:

a.each{|a:, b:| ...}
另一方面,此表达式中的关键字参数出现在括号内:

a.each_with_index{|(a:, b:), i| ...}
导致语法错误:

unexpected tLABEL
a.each_with_index{|(a:, b:), i| }
                      ^

这是一个预期的特性,还是一个bug?

这不只是ruby lexer的结果吗<代码>def foo(a,b:,c:);结束有效,而
定义foo(a,(b:,c:);结束
是否给出与您遇到的错误相同的错误?我不知道你为什么要在这样的块中使用关键字参数。它是ruby解析器:
(0…a.size).zip(a)。每个{I,a:,b:|放一个}
#⇒ 1 3
。这条规则也被称为“女士优先”。对于如何从参数列表的角度处理“关键字”参数,有一个很好的解释