2012-06-11 20 views
5

Tôi đã đọc trong nhiều sách giáo khoaCác mô-đun == mixin có trong ruby ​​không?

Trong Ruby, một lớp chỉ có thể là lớp con của một lớp. Mixins, tuy nhiên, cho phép các lớp không có tổ tiên chung để chia sẻ các phương thức.

Trong thực tế, bất cứ khi nào tôi cần triển khai đa kế thừa. Tôi đã sử dụng Modules & không phải mixin. ví dụ:

Module name_goes_here 
    def method_name_goes_here 
    ..... 
    end 
end 

Sau đó, tôi chỉ nghĩ đến họ trong một lớp

class MySubClass < MySuperClass 
    include module_name 
end 

bây giờ, tôi đã đề cập đến nhiều sách ruby ​​từng nói về mixins & rồi đột nhiên, tất cả họ bắt đầu nói về module mà không làm cho nó rõ ràng mối quan hệ của mixins là gì & mô-đun.

vì vậy, Câu hỏi là: Các mô-đun == mixin có trong ruby ​​không? nếu có, thì tại sao. nếu không, thì sự khác biệt là gì?

PS: xin lỗi, nếu nó là một câu hỏi ngớ ngẩn

Trả lời

13

Mixins là một khái niệm ngôn ngữ cho phép chèn một số mã vào một lớp.

Điều này được triển khai bằng Ruby theo từ khóa include có tham số Module làm tham số.

Vì vậy, có, trong Ruby, mixin được triển khai với các mô-đun. Nhưng các mô-đun có các ứng dụng khác ngoài mixin.

Ví dụ, các mô-đun cũng có thể được sử dụng để đặt tên cho các lớp của bạn hoặc đóng gói các hàm tiện ích để tránh gây ô nhiễm không gian tên chung.

+0

Ngoài mixin, "các ứng dụng khác" của các mô-đun trong ruby ​​là gì? – CuriousMind

+0

@Gaurish Chúng có thể được sử dụng cho các phương pháp đóng gói hoặc đóng gói không thuộc về một lớp để tránh gây ô nhiễm không gian tên chung. –

+0

@AndrewMarshall Cảm ơn, tôi đã thêm đóng góp của bạn vào câu trả lời –

5

Từ wikipedia article

Trong các ngôn ngữ lập trình hướng đối tượng, một mixin là một lớp mà cung cấp một chức năng nhất định để được thừa hưởng hoặc chỉ tái sử dụng bởi một phân lớp, trong khi không có nghĩa là cho instantiation (thế hệ của các đối tượng của lớp đó).

Vì vậy, có, các mô-đun trong Ruby cung cấp cách để sử dụng lại chức năng mà không tự tạo mô-đun. Tôi muốn nói, "mixin trong ruby ​​được thực hiện với các mô-đun", nhưng không phải "mixin là các mô-đun và ngược lại".

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