gpt4 book ai didi

ruby - 在模块内部而不是在顶部使用 `require` 有什么好处?

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:45 25 4
gpt4 key购买 nike

通常,我将大部分 require 语句放在文件的顶部。在阅读 Poltergeist 的源代码时,我注意到以下内容

module Capybara
module Poltergeist
require 'capybara/poltergeist/utility'
require 'capybara/poltergeist/driver'
require 'capybara/poltergeist/browser'
# more requires
end
end

Actual source

这样使用require有什么好处?

最佳答案

这种情况的优点是 Capybara::Poltergeist 模块在需要这些模块之前就已存在。由于这些模块都扩展了 Capybara::Poltergeist 模块,这只是一种确保在模块实际可用之前不会加载它们的方法。在模块定义之后放置 require 语句会产生相同的效果。

考虑以下几点:

# foobar.rb
require './bar_module'

module Foo
module Bar
end
end

# bar_module.rb
module Foo::Bar
def baz
"hi!"
end
end

此设置将失败,因为非嵌套的 Foo::Bar 语法将期望 Foo 在调用此模块时已经存在。通过将第一个文件更改为:

module Foo
module Bar
require './bar_module'
end
end

require 将起作用,因为 Foo::Bar 将在 bar_module 开始执行其操作时存在。

在这个特定的例子中,它没有太多实际效果,因为 Poltergeist 使用嵌套模块语法 (module Foo; module Bar) 而不是折叠语法 (module Foo: :Bar),但基本上描述“这些要求期望此模块存在”是一个很好的做法。

关于ruby - 在模块内部而不是在顶部使用 `require` 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18258838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com