Я встретил это, когда читал исходный код ZenTest:
Вот определение метода add_mapping:
def add_mapping(regexp, &proc)
@test_mappings << [regexp, proc]
end
В Autottest.initailize() вызывается add_method для добавления сопоставления для реализаций.
self.add_mapping(/^lib/.*\.rb$/) do |filename, _|
possible = File.basename(filename).gsub '_', '_?'
files_matching %r%^test/.*#{possible}$%
end
У меня вопрос, что означает "_", второй параметр блока? Кажется, в блоке не используется.
Спасибо

Возможно, автор использует его как короткое имя переменной, чтобы второй параметр можно было игнорировать.
Думаю, правильно. Поскольку он не используется, это не имеет значения.
Это правильно. _ является обычным явлением во многих языках для имени переменной, которое не используется явно. Это означает "игнорировать меня"
def animals
yield "Tiger"
yield "Giraffe"
end
animals { |_| puts "Hello, #{_}" }
Пример украденного из http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics
Насколько я понимаю, он определяет _ как переменную, на которую можно будет ссылаться позже. Это всего лишь принуждение Рубина к руке и определение _ ценности всего, что было получено.
@Radar, я мог понять ваш пример. Но почему «"в моем вопросе ссылка на результат блока? Какова последовательность вызова add_method? Насколько я понимаю,"» должно быть ссылкой на переменную «filename».
Это идиома, используемая для обозначения того, что параметр, связанный с '_', не используется, даже если он должен быть передан блоку / методу.
пример:
def blah
yield 1,2
end
blah {|a,b|
puts a
# b is never used
}
сравните с идентичным:
blah {|a,_|
puts a
}
Обратите внимание, что '_' - это совершенно допустимое имя переменной в ruby, поэтому две версии идентичны, также работает следующее:
blah {|a,_|
puts _
}
Использование '_' - это не что иное, как соглашение, подобное использованию i для счетчиков, 'x' и 'y' или 'foo' и 'bar'.
Это означает, что вы круты, потому что вы увлекались функциональным программированием, что, как я считаю, является источником этой идиомы ...
@ a2800276, не могли бы вы показать мне несколько руководств или ресурсов по этой идиоме "_"?
Учебников нет, это просто идиома, обычное употребление. Это просто имя переменной, такое же, как и любое другое (я отредактировал ost, чтобы было понятнее) Google «шаблон соответствия шаблонов функционального программирования», если вы хотите проверить происхождение.
Вы имеете в виду, что "_" здесь можно заменить на любое имя переменной?