我试图了解何时使用 Ruby 块,并且我看到为了配置rspec-rails
,您需要执行以下操作:
RSpec::configure do |config|
config.foo = bar
end
为什么在这种情况下将其作为一个块来执行会很有用?
我试图了解何时使用 Ruby 块,并且我看到为了配置rspec-rails
,您需要执行以下操作:
RSpec::configure do |config|
config.foo = bar
end
为什么在这种情况下将其作为一个块来执行会很有用?
因为在所有内容前加上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.
之后的语法......但是该块也很好地限定了配置代码的范围/定界。
这只是糖。这是(简化的)来源:
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
在一个块内,您可以更改范围。我相信你在这里的范围内是 RSpec,在块内。我也相信能够在块内说 config.foo = bar 很方便(想象你有 20 多个配置)。