我在阅读 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
我的问题是 block 的第二个参数“_”是什么意思?似乎它没有在 block 中使用。
谢谢
最佳答案
这是一个习惯用法,用于指示绑定(bind)到“_”的参数未被使用,即使它需要传递给 block /方法也是如此。
例子:
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' 一样。
这意味着你很酷,因为你一直在涉足函数式编程,我相信这就是这个习语的起源......
关于ruby - "_"Ruby block 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471952/