2011-10-03 53 views
6

Làm thế nào nó hoạt động? Khi sau đây được chạy "hi from class" được in hai lần. Điều gì đang xảy ra bên trong ruby ​​để làm cho hành vi này như thế này? Tôi KHÔNG trên thực tế làm một phương pháp dụ cho lớpLớp học - ví dụ so với phương pháp lớp học

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

Trả lời

9

tôi không biết cho dù bạn đang nhận thức được rằng, nhưng khi bạn làm class Class ... end, bạn không tạo ra một lớp mới có tên Class, bạn' mở lại lớp hiện tại Class.

Class là lớp mà tất cả các lớp là trường hợp có nghĩa là Class là một ví dụ của chính nó. Và do đó bạn có thể gọi bất kỳ phương pháp thể hiện nào của số Class trực tiếp trên Class giống như cách bạn có thể thực hiện trên bất kỳ lớp nào khác.

+0

Vì vậy, những gì sẽ xảy ra khi (trong cơ thể của 'lớp Class') Tôi' def self.foo; đặt "hi from ** self **"; kết thúc; '... bây giờ câu lệnh' Class.foo' in 'hi from self'? – slindsey3000

+0

@ slindsey3000: Nếu bạn định nghĩa cả một phương thức instance và một method class trên 'Class' thì' Class.foo' sẽ gọi method class và 'AnyOtherClass.foo' sẽ gọi phương thức instance. Vì vậy, trong ví dụ của bạn 'Class.foo' sẽ in' hi from ** self ** 'và ví dụ: 'String.foo' sẽ in' hi from class'. – sepp2k

Các vấn đề liên quan