考虑到Ruby代码
line = "first_name=mickey;last_name=mouse;country=usa"
record = Hash[*line.split(/=|;/)]
除了*
操作员之外,我了解第二行的所有内容——它在做什么,相关文档在哪里?(正如你可能猜到的,事实证明,寻找这个案子很难……)
考虑到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