1

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

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

为什么在这种情况下将其作为一个块来执行会很有用?

4

3 回答 3

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.之后的语法......但是该块也很好地限定了配置代码的范围/定界。

于 2013-03-28T23:32:45.390 回答
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
于 2013-03-28T20:55:17.453 回答
1

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

于 2013-03-28T20:23:09.947 回答