2010-11-12 20 views
16

Duplicar posible:
What is the * operator doing to this string in Ruby¿Qué significa * (estrella) en Ruby?

Probablemente no hay respuesta para eso en otro lugar, pero simplemente no saben cómo encontrarlo ...

Si estoy en lo cierto , el * significa múltiples parámetros si se usa en la definición de la función:

def hero(name, *super_powers) 

¿Pero qué * hacer en el código como el siguiente:

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

Posible duplicado: http://stackoverflow.com/questions/918449/what-is-the-operator-doing-to-this-string-in-ruby –

Respuesta

33

lista de variables Longitud Argumento, Asterisco operador

El último parámetro de un método puede ser precedida por un asterisco (*), que es a veces llamado el operador 'splat'. Esto indica que se pueden pasar más parámetros a la función. Esos parámetros se recopilan y se crea una matriz.

El operador de asterisco también puede preceder a un argumento Array en una llamada a método. En este caso, la matriz se ampliará y los valores pasarán como si estuvieran separados por comas.

+1

También llamada la función Variadic –

+3

No es una explicación completa. Se llama el operador splat http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/ –

+0

Parece que cuando es seguido por un & bloque no tiene que ser el último parámetro de un método. Me encontré con esto con la función de recursos en mapeo de ruta de rieles. Soy nuevo en ruby ​​y quizás sea más porque el parámetro & block es un caso especial. – DustinA

Cuestiones relacionadas