Sự khác biệt duy nhất giữa hai cách tiếp cận là điểm thứ hai sẽ ném uninitialized constant Object::SomeNamespace
nếu không gian tên trước đây chưa được khai báo.
Khi được khai báo trong một tệp, tôi sẽ chọn tùy chọn đầu tiên vì bạn không phải lặp lại SomeNamespace
.
Khi sử dụng nhiều file tôi cũng sử dụng điều thứ hai, để tránh chạy vào vấn đề sau đây:
# in a.rb
require 'b'
module SomeNamespace
def self.animal
Animal.new
end
end
# in b.rb
class SomeNamespace::Animal
end
# irb
require 'a' # explodes with the uninitialized constant error
ví dụ này có thể được trù định, nhưng thật dễ dàng để kích hoạt nó nếu cơ sở mã của bạn là một chút lớn hơn. Tôi thường sử dụng cách rõ ràng (cái đầu tiên của bạn) để tránh điều này.
Một điều có thể hữu ích khi sử dụng biểu mẫu thứ hai là nó sẽ phát hiện lỗi chính tả trong không gian tên.
Có vẻ như không phải là cách được thiết lập để tạo không gian tên, Ví dụ: pha trộn cả hai cách tiếp cận: first one, second one.
Nguồn
2011-10-19 13:14:28