Ví dụ sau thất bạiLàm cách nào để lấy đối tượng lớp từ chuỗi "A :: B :: C" trong Ruby?
class A
class B
end
end
p Object.const_get 'A' # => A
p Object.const_get 'A::B' # => NameError: wrong constant name A::B
CẬP NHẬT
Các câu hỏi về chủ đề hỏi trước đó:
cuối cùng một gives a nice solution có thể được phát triển thành
class String
def to_class
self.split('::').inject(Object) do |mod, class_name|
mod.const_get(class_name)
end
end
end
class A
class B
end
end
p "A::B".to_class # => A::B
gì xảy ra nếu tôi muốn tuyên bố sử dụng các phương pháp 'to_class' và gán giá trị của mình cho một' CONSTANT' trong vòng một 'class', ví dụ 'lớp A bắt đầu MY_CONST =" SomeOtherClass ".to_class end'? Tôi nhận được uninitialized liên tục nếu gọi bên ngoài 'initialize' ví dụ. 'class_eval', tôi có thể thử cái gì? Cảm ơn! – Dr1Ku