2010-09-01 31 views

Respuesta

16

head, *tail = a significa asignar el primer elemento de la matriz a a head, y asignar el resto de los elementos a tail.

*, a veces llamado el "operador de splat", hace una serie de cosas con las matrices. Cuando está en el lado izquierdo de un operador de asignación (=), como en su ejemplo, simplemente significa "tomar todo lo que sobra".

Si omite el splat en ese código, que haría esto en su lugar:

head, tail = [1, 2, 3, 4, 5] 
p head # => 1 
p tail # => 2 

Pero cuando se agrega el splat a tail que significa "Todo lo que no fueron asignados a las variables anteriores (head), asigne al tail. "

+0

nice answer! :) pero realmente deberías cambiar tu foto de perfil, te ves como un caniche demasiado arreglado;) jeje – horseyguy

+0

Haha. No lo tengo antes. Lo tomaré bajo consideración. :) –

+0

@banister: Su foto actual (tal vez no la misma que se utilizó en ese momento) lo hace parecer Justin Bieber! –

0

Yo no sé Rubí en absoluto, pero mi conjetura es que la declaración está dividiendo la lista a en una cabeza (primer elemento) y el resto (otra lista), la asignación de los nuevos valores de las variables head y tail .

Este mecanismo generalmente se refiere (al menos en Erlang) como pattern matching.

8

Primero, es una asignación paralela. En Ruby puede escribir

a,b = 1,2 

y será 1 y B será 2. También puede utilizar

a,b = b,a 

para cambiar los valores (sin la temp variable típica necesaria en otros idiomas).

La estrella * es el operador de paquete/desembalaje. Escribir

a,b = [1,2,3] 

asignaría 1 a ay 2 a b. Al utilizar la estrella, los valores 2,3 se empaquetan en una matriz y se asignan a b:

a,*b = [1,2,3]