Большинство из них знают о специальном значении _
в IRB как держателе для последнего значения возврата, но это не то, о чем я прошу здесь.
Вместо этого я спрашиваю о _
при использовании в качестве имени переменной в обычном-Ruby-коде. Здесь он, похоже, имеет особое поведение, сродни переменной "не волнует меня" (à la Prolog). Вот несколько полезных примеров, иллюстрирующих его уникальное поведение:
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
Все они были запущены в Ruby напрямую (с добавлением puts
) - не IRB - чтобы не противоречить его дополнительным функциям.
Все это результат моего собственного эксперимента, хотя я не могу найти никакой документации по этому поведению в любом месте (по общему признанию, это не самая простая вещь для поиска). В конечном счете, мне любопытно, как все это работает внутри, поэтому я могу лучше понять, что особенного в _
. Поэтому я запрашиваю ссылки на документацию и, желательно, исходный код Ruby (и, возможно, RubySpec), которые показывают, как ведет себя _
в Ruby.
Примечание: большая часть этого возникла из этой дискуссии с @Niklas B.суб >