2011-01-17 30 views
5

Tôi biết rằng một mô-đun có thể được bao gồm trong một lớp học hoặc một mô-đun khác. Nhưng, tôi thấy here rằng một mô-đun được bao gồm theo phương thức. Điều này có nghĩa là gì?Ruby: Mô-đun được bao gồm trong phương thức có nghĩa là gì?

module ActsAsVotable 

    module ClassMethods 

    def acts_as_votable 
     has_many :votes, :as => :votable, :dependent => :delete_all 
     include InstanceMethods # What does this means ?? 
    end 

    end 

    module InstanceMethods 

    def cast_vote(vote) 
     Vote.create(:votable => self, :up => vote == :up) 
    end 

    end 

end 

Trả lời

4

Trong trường hợp này, phương pháp định nghĩa có nghĩa là để được gọi là ở cấp lớp, như thế này:

class Foo 
    include ActsAsVotable 
    acts_as_votable 
end 

Ruby có tuyệt vời/khủng khiếp (phụ thuộc vào người bạn hỏi) tính năng này mà bạn có thể định nghĩa động một lớp. Ở đây, phương thức acts_as_votable đầu tiên gọi has_many (thêm một số mthod vào lớp Foo) và sau đó thêm phương thức cast_vote vào lớp Foo thông qua include InstanceMethods.

Vì vậy, bạn kết thúc với tương đương với:

class Foo 
    # Will add further methods. 
    has_many :votes, :as => :votable, :dependent => :delete_all 

    # include InstanceMethods 
    def cast_vote(vote) 
     Vote.create(:votable => self, :up => vote == :up) 
    end 
end 
+0

Tôi nghĩ rằng trong Ruby một lớp có thể kế thừa duy nhất từ ​​lớp khác, nhưng tôi thấy trong mã của bạn rằng một lớp kế thừa từ một module: 'lớp Foo

+0

Argh, bạn đã đúng. Nó đáng lẽ phải là 'lớp Foo; bao gồm ActsAsVotable; actions_as_votable; kết thúc'. Đã chỉnh sửa câu trả lời của tôi cho phù hợp. – DarkDust

+0

Nó cũng không có tác dụng với tôi. Xem ở đây: http://codepad.org/vDvpda9M –

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