首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈希[string.split(...)]vs哈希[*string.split(...)]

哈希[string.split(...)]vs哈希[*string.split(...)]
EN

Stack Overflow用户
提问于 2013-07-06 08:22:39
回答 2查看 87关注 0票数 1

试图理解为什么这会返回一个很好的填充散列:

代码语言:javascript
复制
 Hash[*myString.split("\n")]

而这会返回一个空的哈希值?

代码语言:javascript
复制
 Hash[myString.split("\n")]

我看到星号是键,它表示一个可变长度的参数...但是Hash的一个要求是...它可以接受偶数组并将其转换为有效的散列。好吧,在上面的第二个例子中,新行上的string.split返回一个偶数数组,为什么不允许呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-06 08:31:52

这是因为splat *字符将数组扩展为每个单独的元素,而不是将数组作为一个整体传入。取自Ruby 2.0散列文档:

代码语言:javascript
复制
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[]方法传入元素只是按照预期对散列进行格式化。请将其与

代码语言:javascript
复制
Hash[ Array.new ]

它返回一个空的散列,因为你实际上给了它一个奇数个参数,这些参数不会映射到一个合适的散列。

票数 3
EN

Stack Overflow用户

发布于 2013-07-06 08:37:13

完全同意现有的答案,但这里有一个更明确的例子,可以解释为什么在这种情况下需要splat:

代码语言:javascript
复制
test_string = "my\ntest\nstring"

[test_string.split("\n")]  #=> [["my", "test", "string"]]
[*test_string.split("\n")] #=> ["my", "test", "string"]

正如您所看到的,如果没有拆分,您将为Hash[]提供单个参数(一个数组),而不是多个参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17498395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档