Theo tài liệu mod.const_get(sym)
"Trả về giá trị của hằng số được đặt tên theo mod".Hành vi khó hiểu của const_get trong Ruby?
Tôi cũng biết rằng const_get
theo mặc định có thể tra cứu chuỗi kế thừa của người nhận. Vì vậy, các công trình sau đây:
class A; HELLO = :hello; end
class B < A; end
B.const_get(:HELLO) #=> :hello
tôi cũng biết rằng các lớp học trong Ruby lớp con Object
, do đó bạn có thể sử dụng const_get
nhìn lên hằng 'toàn cầu' mặc dù người nhận là một lớp học bình thường:
class C; end
C.const_get(:Array) #=> Array
Tuy nhiên, và đây là nơi tôi đang bối rối - mô-đun không phân lớp Object
. Vậy tại sao tôi vẫn có thể tra cứu các hằng số 'toàn cục' từ một mô-đun bằng cách sử dụng const_get
? Tại sao công việc sau đây?
module M; end
M.const_get(:Array) #=> Array
Nếu tài liệu chính xác - const_get
chỉ cần tra cứu hằng số được xác định trong người nhận hoặc siêu lớp của nó. Nhưng trong mã ngay phía trên, Object
không phải là siêu lớp của M
, vậy tại sao có thể tra cứu Array
?
Cảm ơn
Lưu ý rằng điều này không khớp với hành vi của '::'. 'SomeModule :: SomeGlobalConstant' sẽ gây ra lỗi, trong khi' SomeModule.const_get (: SomeGlobalConstant) 'sẽ hoạt động. – sepp2k