【发布时间】:2014-10-01 05:45:18
【问题描述】:
double splat 运算符** 似乎只适用于键为符号的哈希。例如,当键是字符串时,它将不起作用。两种方式都是如此;施工:
def foo **; end
foo(:a => 3) #=> nil
foo("a" => 3) #=> ArgumentError: wrong number of arguments (1 for 0)
和破坏:
def bar *; end
bar(**{:a => 3}) #=> nil
bar(**{"a" => 3}) #=> TypeError: wrong argument type String (expected Symbol)
为什么仅限于符号键?
这可能与命名关键字符号 a: 3 与符号键哈希的语法糖重合有关,但如上所示,双 splat 与普通哈希符号 :a => 3 一起使用,所以我不是确定这一点。
【问题讨论】:
-
由于到目前为止还没有人找到原因,我认为没有特别的原因。我在 Ruby bugs.ruby-lang.org/issues/10118 上将此作为功能请求提出。