Hãy mở lớp Module
và thêm một phương pháp để nó:Class, Module, eigenclasses của họ, và phương pháp tra cứu
class Module
def foo
puts "phew"
end
end
tôi có thể gọi phương pháp này bằng cách làm này,
Class.foo
đó là điều dễ hiểu vì lớp học của Class
là Class
, có lớp bậc trên là Module
. vì vậy nó có thể gọi các phương thức thể hiện được xác định trong Module
.
Bây giờ, phương pháp bar
dưới đây được định nghĩa trên eigenclass Module
's:
class Module
def self.bar
puts "bar"
end
end
nhưng bây giờ
Class.bar
cũng làm việc.
Ai đó có thể giải thích cho tôi cách Class
có thể truy cập các phương pháp trong eigenclass của Module
không?
Tôi nghĩ mình đã hiểu ngay bây giờ. Phương pháp tra cứu không hoạt động theo cách tôi đã giải thích trước đây. khi tôi làm Class.foo
, phương pháp này được tìm kiếm trong eigenclass của Class
và sau đó là siêu lớp của nó là Module
's eigenclass tất cả các cách tối đa BasicObject
' s eigenclass tại thời điểm nó biến mình (như một con rắn ăn đuôi của nó) đối với phương thức trong Class
(như Class
là siêu lớp của số eigenclass BasicObject
) và sau đó là siêu lớp Module
, tại đó tìm phương thức.
Tương tự, khi tôi làm Class.bar
, phương pháp được tìm kiếm trong eigenclass của Class
và sau đó trong eigenclass của Module
nơi tìm thấy nó.
Khi tôi làm
class Class
def check
puts "class instance method"
end
end
và
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
đoán wot là sản phẩm khi tôi làm:
Class.check
Đây là sự hiểu biết hiện tại của tôi:
Thảo luận liên quan Tôi thấy hữu ích: https: // stackoverflow.com/questions/13269271/why-a-modules-singleton-method-is-not-visible-in-downstream-eigenclasses-nơi –