1
爲什麼這段代碼潑濺在參數位置
Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten]
回報這個
{:first_name=>"Shane", :last_name=>"Harvie"}
我知道Array#flatten
。但是*
是什麼意思?我如何查找關於它的信息?
爲什麼這段代碼潑濺在參數位置
Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten]
回報這個
{:first_name=>"Shane", :last_name=>"Harvie"}
我知道Array#flatten
。但是*
是什麼意思?我如何查找關於它的信息?
它所謂的圖示操作。在這種情況下,它需要一個數組並將其「擴展」,產生一個參數列表以調用Hash.[]
。基本上
Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten]
相當於該
Hash[*[:first_name, 'Shane', :last_name, 'Harvie']]
這相當於這個
Hash[:first_name, 'Shane', :last_name, 'Harvie']
一個簡單的圖示操作例子,除了Sergio的答案:
def foo(arg1, arg2)
puts arg1
puts arg2
end
args = ["bar", "baz"]
foo(args)
#=> ArgumentError: wrong number of arguments (1 for 2)
foo(*args)
#=> "bar"
#=> "baz"
我如果你表現出這種想法會更好在應用splat操作符之前應用「flatten」之後的步驟。 – sawa
@sawa:我認爲你是對的。編輯。 –