I met this when I read ZenTest source code:
Here is the definition of add_mapping method:
def add_mapping(regexp, &proc)
@test_mappings << [regexp, proc]
end
In the Autottest.initailize()
, add_method
get called to add mapping for implementations.
self.add_mapping(/^lib\/.*\.rb$/) do |filename, _|
possible = File.basename(filename).gsub '_', '_?'
files_matching %r%^test/.*#{possible}$%
end
My question is what "_", the second parameter of the block, means? Seems it is not used in the block.
Thanks
It's an idiom used to indicate the the parameter bound to '_' is not used, even though it's required to be passed to the block/method.
example:
def blah
yield 1,2
end
blah {|a,b|
puts a
# b is never used
}
compare to the identical:
blah {|a,_|
puts a
}
Note that '_' is a perfectly legal variable name in ruby, so the two versions are identical, the following works as well:
blah {|a,_|
puts _
}
Using '_' is nothing more than a convention like using i
for counters, 'x' and 'y' or 'foo' and 'bar'.
It means you're cool because you've been dabbling with functional programming, which is, I believe, where this idiom orignates...