2010-02-04 27 views
7

Tôi không thể tìm ra nguồn khác biệt giữa các phương pháp cattr_*mattr_* được cung cấp trong Lớp và Mô-đun tương ứng. Tôi đọc câu hỏi này: What is mattr_accessor in a Rails module? cung cấp một số chi tiết về cả hai phương pháp nhưng không làm nổi bật sự khác biệt.Sự khác nhau giữa mattr_accessor và cattr_accessor trong ActiveSupport?

Vì vậy, câu hỏi của tôi là sự khác biệt giữa chúng là gì và tại sao chúng ta cần cả hai tập hợp phương pháp khi chúng thực tế giống nhau trong nguồn? Ngoài ra, chúng ta nên sử dụng khi nào?

Trả lời

10

Module là siêu lớp của lớp Class vì vậy nếu một tên phù hợp chung có thể được nghĩ đến thì phương pháp xác định người truy cập có thể được đặt trên Module và nó sẽ hoạt động cho mô-đun và lớp học. Chú ý rằng sau hoạt động:

class Bar 
    mattr_accessor :test 
end 

nhưng

module Foo 
    cattr_accessor :test 
end 

sẽ không hoạt động.

Có một tiền tố c về các phương pháp đó phải được sử dụng bên trong các lớp học và một tiền tố m về các phương pháp để sử dụng trong module chỉ giúp để làm cho mã của bạn một chút rõ ràng hơn.

+0

Vì vậy, chức năng chúng hoàn toàn tương đương? Ngoài ra, điều này làm cho tôi tự hỏi tại sao họ đã không được DRYed trong nguồn Rails như các cơ quan phương pháp giống hệt nhau ... – tobyclemson

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