Tôi có một mô-đun, có chứa lớp có tên String
(trong số những người khác). Tôi cần tra cứu lớp theo tên và quay lại một cách duyên dáng nếu không có lớp học như vậy.Có thể thu hẹp tra cứu hằng số ruby
module Mod1
module String
end
end
Mod1.const_get 'String'
#⇒ Mod1::String
Kernel.const_get '::Mod1::String'
#⇒ Mod1::String
cho đến giờ, rất tốt. Tôi dự kiến sẽ nhận được NameError
khi tôi cố gắng tra cứu lớp không tồn tại, điều đó là tốt. Vấn đề là nếu có một lớp học với tên được đặt tồn tại trong không gian tên toàn cầu, nó đang được trả về:
Mod1.const_get 'Fixnum'
#⇒ Fixnum < Integer
Kernel.const_get '::Mod1::Fixnum'
#⇒ Fixnum < Integer
tôi hiểu được lý do, nhưng câu hỏi của tôi sẽ là: là có một out-of -phương pháp hộp để tra cứu một hằng số trong không gian tên đã cho?
Bây giờ tôi kiểm tra kết quả với
result.to_s.start_with?(namespace)
nhưng điều này chắc chắn là không phải là cách để thu hẹp fanciest một tra cứu.
Perfect, cảm ơn. Lời khuyên hiển nhiên "hãy xem tài liệu phương pháp" hoạt động như bình thường. – mudasobwa
Tôi có thể đề xuất liên kết tới các tài liệu thay vì nguồn MRI không? http://ruby-doc.org/core-2.3.1/Module.html#method-i-const_get –