2010-11-12 43 views
16

可能重複:
What is the * operator doing to this string in Ruby*(星號)在Ruby中表示什麼?

有可能是對這個問題的答案在其他地方,但我只是不知道如何找到它......

如果我是正確的,*表示如果在函數定義中使用多個參數:

def hero(name, *super_powers) 

但什麼是*做這樣的代碼:

Hash[*[[:first_name, 'Shane'], [:last_name, 'Harvie']].flatten] # => {:first_name=>"Shane", :last_name=>"Harvie"} 
+0

可能的重複:http://stackoverflow.com/questions/918449/what-is-the-operator-doing-to-this-string-in-ruby – 2010-11-12 23:56:02

回答

33

可變長度參數列表,Asterisk的操作

的方法的最後一個參數可以用星號(*),有時前面稱爲'splat'操作員。這表示可以將更多參數傳遞給該函數。收集這些參數並創建一個數組。

星號運算符也可能在方法調用中的Array參數之前。在這種情況下,數組將被展開並且值傳入,就好像它們被逗號分隔開一樣。

+1

也稱爲變量函數 – 2010-11-12 23:58:28

+3

不完整的解釋。它被稱爲摔跤運營商http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/ – 2010-11-13 00:01:32

+0

它看起來像它後面跟着一個&塊它不必是方法的最後一個參數。我在rails路徑映射中遇到了這個資源函數。我是ruby的新手,可能更多的是因爲&block參數是一個特殊情況。 – DustinA 2017-04-07 20:05:23