了解Ruby块。为什么Rspec这样做?

时间:2013-03-28 20:12:48

标签: ruby

我试图了解何时使用Ruby块,我发现为了配置rspec-rails,您需要执行以下操作:

RSpec::configure do |config|
  config.foo = bar
end

为什么在这种情况下作为块执行此操作会很有用?

3 个答案:

答案 0 :(得分:3)

因为使用RSpec.configuration为所有内容添加前缀会很繁琐。你更喜欢哪一个?

RSpec.configuration.some_config_option = 5
RSpec.configuration.some_other_config_option = 6
RSpec.configuration.yet_another_config_option = :foo

或者:

RSpec.configure do |c|
  c.some_config_option = 5
  c.some_other_config_option = 6
  c.yet_another_config_option = :foo
end

显然,您可以编写c = RSpec.configuration然后使用c.语法...但该块也可以很好地定义/分隔配置代码。

答案 1 :(得分:2)

这只是糖。这是(简化)来源:

module Rspec
  def self.configuration
    @configuration ||= RSpec::Core::Configuration.new
  end

  def self.configure
    yield configuration if block_given?
  end

  # rest omitted
end

请参阅https://github.com/rspec/rspec-core/blob/master/lib/rspec/core.rb

上的来源

这意味着你也可以写

config = Rspec.configuration
config.foo = bar

答案 2 :(得分:1)

在一个区块内,您可以更改范围。我相信你在这里的范围内是RSpec的范围。我也相信能够在块中说出config.foo = bar是一种方便(成像你有20多种配置)。