«_» параметр блока Ruby - PullRequest
       7

«_» параметр блока Ruby

2 голосов
/ 23 января 2009

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

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 23 января 2009

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

пример:

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».

Это означает, что вы крутые, потому что вы увлекались функциональным программированием, которое, как я полагаю, идиотизирует эту идиому ...

4 голосов
/ 23 января 2009
def animals
  yield "Tiger"
  yield "Giraffe"
end
animals { |_| puts "Hello, #{_}" }

Пример, украденный у http://en.wikibooks.org/wiki/Ruby_Programming/Ruby_Basics

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

2 голосов
/ 23 января 2009

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

...