Lợi thế trong trường hợp này là mô-đun Capybara::Poltergeist
tồn tại trước các mô-đun được yêu cầu. Vì các mô-đun này mở rộng mô-đun Capybara::Poltergeist
, đây chỉ là một cách để đảm bảo rằng chúng không được tải trước khi mô-đun thực sự có sẵn. Đặt các câu lệnh require sau khi định nghĩa module sẽ có cùng tác dụng.
xem xét như sau:
# foobar.rb
require './bar_module'
module Foo
module Bar
end
end
# bar_module.rb
module Foo::Bar
def baz
"hi!"
end
end
Thiết lập này sẽ thất bại vì không lồng nhau Foo::Bar
cú pháp sẽ mong đợi Foo
đến đã tồn tại vào thời điểm module này được gọi. Bằng cách thay đổi các tập tin đầu tiên:
module Foo
module Bar
require './bar_module'
end
end
Các yêu cầu sẽ làm việc, kể từ Foo::Bar
sẽ tồn tại vào thời điểm đó bar_module
bắt đầu làm việc của nó. Trong trường hợp cụ thể này, nó không có nhiều hiệu ứng thực tế, vì Poltergeist sử dụng cú pháp mô đun lồng nhau (module Foo; module Bar
) thay vì cú pháp thu gọn (module Foo::Bar
), nhưng thực hành tốt là cơ bản. để tồn tại ".
Nguồn
2013-08-15 21:07:03
Sẽ không tốt hơn nếu sử dụng phương pháp tự động tải thay vì chèn các yêu cầu trong phương thức? Tôi nghĩ rằng nó sẽ là một giải pháp thanh lịch hơn, vì tôi chỉ tải nó khi cần thiết cho cuộc gọi –