La mayoría son conscientes del _significado especial de 'en IRB como tenedor del último valor de retorno, pero eso no es lo que estoy preguntando aquí.
En cambio, estoy preguntando sobre _cuándo se usa como nombre de variable en código Ruby simple y antiguo. Aquí parece tener un comportamiento especial, similar a una “variable no importa” (à la Prolog ). A continuación, se muestran algunos ejemplos útiles que ilustran su comportamiento único:
lambda { |x, x| 42 } # SyntaxError: duplicated argument name
lambda { |_, _| 42 }.call(4, 2) # => 42
lambda { |_, _| 42 }.call(_, _) # NameError: undefined local variable or method `_'
lambda { |_| _ + 1 }.call(42) # => 43
lambda { |_, _| _ }.call(4, 2) # 1.8.7: => 2
# 1.9.3: => 4
_ = 42
_ * 100 # => 4200
_, _ = 4, 2; _ # => 2
Todos estos se ejecutaron en Ruby directamente (con putss agregados), no en IRB, para evitar conflictos con su funcionalidad adicional.
Sin embargo, todo esto es el resultado de mi propia experimentación, ya que no puedo encontrar ninguna documentación sobre este comportamiento en ninguna parte (es cierto que no es lo más fácil de buscar). En última instancia, tengo curiosidad por saber cómo funciona todo esto internamente para poder comprender mejor exactamente de qué se trata _. Así que estoy pidiendo referencias a la documentación y, preferiblemente, el código fuente de Ruby (y quizás RubySpec ) que revele cómo se _comporta en Ruby.
Nota: la mayor parte de esto surgió de esta discusión con @Niklas B.
lambda { |_, _| _ }.call(4, 2)entre 1.8 y 1.9 es solo un efecto secundario involuntario, entonces. Como en circunstancias "normales" en las que el nombre de la variable no se puede duplicar, el orden en el que se asignan es intrascendente.