2009-05-28 16 views

Respuesta

1

El operador splat está poco documentado en la documentación básica de Ruby a partir de Ruby 2.4. Sin embargo, es una característica central del lenguaje y el código fuente del operador splat se puede encontrar en vm_eval.c bajo rb_yield_splat(VALUE values).

El unit test para rb_yield_splat hace que sea más claro lo que está sucediendo:

it "yields with passed array's contents" do 
    ret = nil 
    @s.rb_yield_splat([1, 2]) { |x, y| ret = x + y } 
    ret.should == 3 
end 
+0

eso es genial, pero ¿cómo supiste dónde está la fuente? –

+0

Lo [busqué] (https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93) en el repositorio de Ruby git. Limite la búsqueda a archivos C, luego lea el código fuente hasta que lo encuentre. – anothermh

+0

Wow eso es genial. Gracias. –

7

Algunas búsquedas rápidas en Google resultaron ser implementadas en eval.c. Puedes encontrar referencias a "splat" en algunos lugares del archivo, pero no estoy lo suficientemente familiarizado con el funcionamiento interno de Ruby como para entenderlo.

+0

Gracias por eso, Martin. Solo trato de darle sentido al mundo de Ruby. Entonces, básicamente, si se trata de ruby ​​y no de rails, la fuente probablemente no esté en Ruby, lo cual tiene sentido. –

+0

El operador splat es parte del lenguaje básico de ruby, no una función de biblioteca. Se puede usar en cualquier objeto que defina un método #to_ary, pero cuando se usa para recopilar valores múltiples en una sola variable (como en 'a, * b = 1,2,3,4,5') siempre creará un Formación. – rampion

+0

@Rampion, gracias por eso. Así que supongo que mi verdadera pregunta sería: ¿hay alguna "característica de la biblioteca" (para la cual el código fuente está en Ruby) que no necesita un "requerir"? –