Параметр "_" блока Ruby

Я встретил это, когда читал исходный код 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

У меня вопрос, что означает "_", второй параметр блока? Кажется, в блоке не используется.

Спасибо

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
2
0
442
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Возможно, автор использует его как короткое имя переменной, чтобы второй параметр можно было игнорировать.

Вы имеете в виду, что "_" здесь можно заменить на любое имя переменной?

eric2323223 23.01.2009 08:20

Думаю, правильно. Поскольку он не используется, это не имеет значения.

Sophie Alpert 23.01.2009 08:29

Это правильно. _ является обычным явлением во многих языках для имени переменной, которое не используется явно. Это означает "игнорировать меня"

J Cooper 23.01.2009 10:01
def animals
  yield "Tiger"
  yield "Giraffe"
end
animals { |_| puts "Hello, #{_}" }

Пример украденного из http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics

Насколько я понимаю, он определяет _ как переменную, на которую можно будет ссылаться позже. Это всего лишь принуждение Рубина к руке и определение _ ценности всего, что было получено.

@Radar, я мог понять ваш пример. Но почему «"в моем вопросе ссылка на результат блока? Какова последовательность вызова add_method? Насколько я понимаю,"» должно быть ссылкой на переменную «filename».

eric2323223 23.01.2009 18:14
Ответ принят как подходящий

Это идиома, используемая для обозначения того, что параметр, связанный с '_', не используется, даже если он должен быть передан блоку / методу.

пример:

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, не могли бы вы показать мне несколько руководств или ресурсов по этой идиоме "_"?

eric2323223 23.01.2009 18:21

Учебников нет, это просто идиома, обычное употребление. Это просто имя переменной, такое же, как и любое другое (я отредактировал ost, чтобы было понятнее) Google «шаблон соответствия шаблонов функционального программирования», если вы хотите проверить происхождение.

a2800276 23.01.2009 23:00

Другие вопросы по теме