喋喋不休的争论位置

bar*_*rak 1 ruby splat

为什么这个代码

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] 
Run Code Online (Sandbox Code Playgroud)

归还这个

{:first_name=>"Shane", :last_name=>"Harvie"}
Run Code Online (Sandbox Code Playgroud)

我知道Array#flatten.但这*意味着什么?我如何查找有关它的信息?

Ser*_*sev 5

它就是所谓的splat运算符.在这种情况下,它接受一个数组并"扩展"它,产生一个要Hash.[]调用的参数列表.基本上

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] 
Run Code Online (Sandbox Code Playgroud)

相当于此

Hash[*[:first_name, 'Shane', :last_name, 'Harvie']] 
Run Code Online (Sandbox Code Playgroud)

这相当于此

Hash[:first_name, 'Shane', :last_name, 'Harvie'] 
Run Code Online (Sandbox Code Playgroud)