考虑到Ruby代码

line = "first_name=mickey;last_name=mouse;country=usa" 
record = Hash[*line.split(/=|;/)] 

除了*操作员之外,我了解第二行的所有内容——它在做什么,相关文档在哪里?(正如你可能猜到的,事实证明,寻找这个案子很难……)

推荐答案

*splat接线员.

它将Array扩展为参数列表,在本例中是Hash.[]方法的参数列表.(更准确地说,它扩展了响应to_ary/to_a或Ruby 1.9中to_a的任何对象.)

为了说明这一点,以下两种说法是相等的:

method arg1, arg2, arg3
method *[arg1, arg2, arg3]

它还可以在不同的上下文中使用,以捕获方法定义中所有剩余的方法参数.在这种情况下,它不会扩展,而是结合:

def method2(*args)  # args will hold Array of all arguments
end

Some more detailed information here

Ruby相关问答推荐

Rails 7 - 访问连接模型生成新查询

Ruby 中的 Float#floor 和 Float#to_i 有什么区别?

如何在将拆分元素保留为空字符串的同时拆分字符串?

回声ABC | ruby -p -e "sub('a','A').sub('b', 'B')": 为什么不是 "ABc"?

有没有办法在 Capybara 中保持登录状态?

Ruby 和用正则表达式分割字符串

冒号:和粗箭头=>有什么区别

Ruby: initialize() vs 类体(class body)?

如何在 Sinatra 中解析 JSON 请求正文一次并将其公开给所有路由?

有没有办法通过哈希初始化对象?

Ruby:如何计算相对于另一个路径的路径?

判断 Ruby Gem 的可用性

无法从同一网络上的另一台计算机访问本地 Sinatra 服务器

使用 bundler 安装较新版本的 bundler

我应该在我的 ruby​​ 脚本中定义一个 main 方法吗?

如何在不使用循环的情况下按数组中的计数分组

如何传递函数而不是块

Ruby Style:如何判断嵌套的哈希元素是否存在

如何在Ruby中将字符串拆分为仅具有给定字符的两部分?

什么是 Ruby 1.9 标准 CSV 库?