Tôi có một tập tin bên ngoài: path_to_external_file.rb
với một số định nghĩa lớp:tải file bên ngoài trong một lớp học/mô-đun
class A
some_definitions
end
Và tôi muốn tải mà trong mô-đun B
để các lớp A
định nghĩa ở trên có thể được gọi là B::A
. Tôi cố gắng:
class B
load('path_to_external_file.rb')
end
nhưng A
được định nghĩa trong môi trường chính, không phải trong B
:
A #=> A
B.constants # => []
Làm thế nào tôi có thể tải các tập tin bên ngoài trong một số lớp/module?
Sửa Tôi có nên đọc các tập tin bên ngoài như dây đàn, và đánh giá chúng trong Class.new{...}
, và include
rằng lớp trong B
?
đến mức kết thúc? Tại sao bạn không thể sử dụng trực tiếp lớp A?Bạn đang nhận được một số lợi ích từ mô đun hóa nó? 'load' và' require' sẽ không thực sự nạp một lớp vào một mô-đun, chúng chỉ tải mã nguồn, vì vậy các lớp của bạn được định nghĩa chính xác như chúng có trong tệp. Bạn không chắc chắn lý do tại sao bạn muốn làm điều này? – brad
@brad Bởi vì các tệp bên ngoài này sẽ được viết bởi người dùng và có thể được đặt tên tùy ý. Nếu tôi định nghĩa các lớp đó trong môi trường chính, chúng sẽ làm hỏng không gian đặt tên. – sawa
Cảnh giác với việc giả mạo các không gian tên khác thông qua 'ObjectSpace # each_object'. – Reactormonk