La plupart sont conscients de l' _
s'signification spéciale dans la CISR en tant que titulaire pour la dernière valeur de retour, mais ce n'est pas ce que je veux parler ici.
Au lieu de cela, je veux parler d' _
lorsqu'il est utilisé comme un nom de variable dans la plaine du-vieux-Ruby-code. Ici, il semble avoir un comportement spécial, qui s'apparente à un "ne se soucient pas de la variable" (à la Prolog). Voici quelques exemples illustrant son comportement unique:
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
Ils ont tous été exécutés dans Ruby directement (avec puts
s ajouté)-pas de la CISR pour éviter tout conflit avec ses fonctionnalités supplémentaires.
Tout cela est une conséquence de ma propre expérimentation bien, comme je ne trouve aucune documentation sur ce comportement n'importe où (il est vrai que ce n'est pas la chose la plus facile pour la recherche). En fin de compte, je suis curieux de voir comment tout cela fonctionne en interne, afin que je puisse mieux comprendre exactement ce qui est spécial à propos de _
. Donc, je suis en demandant des références à la documentation, et, de préférence, le Rubis le code source (et peut-être RubySpec) qui révèlent comment _
se comporte en Ruby.
Remarque: la plupart de cela est née de cette discussion avec @Niklas B.