我试图了解何时使用Ruby块,我发现为了配置rspec-rails
,您需要执行以下操作:
RSpec::configure do |config|
config.foo = bar
end
为什么在这种情况下作为块执行此操作会很有用?
答案 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多种配置)。