Estoy aprendiendo sobre Ruby y acabo de entrar en algunas cosas sobre arreglos y rangos. Me he topado con algo sobre rebanadas que, si bien tiene sentido a primera vista, me confunde un poco cuando lo miro más profundamente.Ruby: El rango está vacío, pero cortarlo produce elementos
IRB dice que (2..-1).to_a
es una matriz vacía, lo que significa que no hay valores en el rango, ¿verdad?
Pero si utilizo el mismo rango en [:a, :b, :c, :d, :e][2..-1]
, obtengo [:c, :d, :e]
en lugar de una matriz vacía.
Ahora, soy consciente de que -1 representa el último elemento de la matriz, por lo que tiene sentido que lo que se seleccionó, lo hizo. Pero si el rango en sí estaría vacío, ¿cómo está seleccionando algo?
Para referencia futura, ¿cuál es la estrella en '* (2 ..- 1) .to_a' para? – cHao
que sería el operador 'splat'. – Peter
Más precisamente: 'foo ([1,2,3])' llama a 'foo' con un argumento (de lista). 'foo (* [1,2,3])' lo llama con tres: es equivalente a 'foo (1,2,3)'; la lista se deconstruye y sus elementos se salpican sobre la llamada de función. – Amadan