Ruby块的"_"参数

eri*_*223 2 ruby zentest

我在阅读ZenTest源代码时遇到了这个问题:

以下是add_mapping方法的定义:

def add_mapping(regexp, &proc)
  @test_mappings << [regexp, proc]
end
Run Code Online (Sandbox Code Playgroud)

Autottest.initailize(),add_method被调用为实现添加映射.

self.add_mapping(/^lib\/.*\.rb$/) do |filename, _|
  possible = File.basename(filename).gsub '_', '_?'
  files_matching %r%^test/.*#{possible}$%
end
Run Code Online (Sandbox Code Playgroud)

我的问题是块的第二个参数"_"是什么意思?似乎它没有在块中使用.

谢谢

a28*_*276 6

它是一个习惯用于表示未使用绑定到'_'的参数,即使它需要传递给块/方法.

例:

def blah
   yield 1,2
end

blah {|a,b|
  puts a
  # b is never used
}
Run Code Online (Sandbox Code Playgroud)

比较相同:

blah {|a,_|
   puts a
}
Run Code Online (Sandbox Code Playgroud)

请注意,'_'是ruby中完全合法的变量名,因此两个版本相同,以下也适用:

blah {|a,_|
   puts _
}
Run Code Online (Sandbox Code Playgroud)

使用'_'只不过是i用于计数器,'x'和'y'或'foo'和'bar' 的约定.

这意味着你很酷,因为你一直在涉及功能性编程,我相信,这个成语在哪里...