ruby - "_"Ruby block 参数

标签 ruby zentest

我在阅读 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/

相关文章:

ruby-on-rails - rake 测试发现测试。自动测试找不到它们

ruby-on-rails - 在实例依赖范围的情况下解析 N + 1

ruby - 有没有办法让 attr_reader 创建与实例变量名称不同的方法?

ruby-on-rails - 机械师,我如何引用我正在制作的对象并将其传递给关联? (关联类型不匹配)

ruby - 无法解析依赖关系:用户请求 'did_you_mean (= 1.2.0)' (Gem::UnsatisfiableDependencyError)

ruby-on-rails - 不选择 updated_at 属性就无法在 Rails 4 中更新模型

ruby - 在带有 Rails 3、Ruby 1.9.2 的 Windows 7 上运行自动测试时出错

ruby-on-rails - Rails 中的 ZenTest 错误