试图理解为什么这会返回一个很好的填充散列:
Hash[*myString.split("\n")]而这会返回一个空的哈希值?
Hash[myString.split("\n")]我看到星号是键,它表示一个可变长度的参数...但是Hash的一个要求是...它可以接受偶数组并将其转换为有效的散列。好吧,在上面的第二个例子中,新行上的string.split返回一个偶数数组,为什么不允许呢?
发布于 2013-07-06 08:31:52
这是因为splat *字符将数组扩展为每个单独的元素,而不是将数组作为一个整体传入。取自Ruby 2.0散列文档:
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}使用Hash[]方法传入元素只是按照预期对散列进行格式化。请将其与
Hash[ Array.new ]它返回一个空的散列,因为你实际上给了它一个奇数个参数,这些参数不会映射到一个合适的散列。
发布于 2013-07-06 08:37:13
完全同意现有的答案,但这里有一个更明确的例子,可以解释为什么在这种情况下需要splat:
test_string = "my\ntest\nstring"
[test_string.split("\n")] #=> [["my", "test", "string"]]
[*test_string.split("\n")] #=> ["my", "test", "string"]正如您所看到的,如果没有拆分,您将为Hash[]提供单个参数(一个数组),而不是多个参数。
https://stackoverflow.com/questions/17498395
复制相似问题