Sự khác biệt giữa Mixins và Traits là gì?
Theo Wikipedia , Mô-đun Ruby là những đặc điểm giống như. Làm sao vậy
Sự khác biệt giữa Mixins và Traits là gì?
Theo Wikipedia , Mô-đun Ruby là những đặc điểm giống như. Làm sao vậy
Câu trả lời:
quảng cáo 1. Trong mixins, bạn có thể xác định các biến thể hiện. Đặc điểm không cho phép điều này. Trạng thái phải được cung cấp bằng cách soạn lớp (= class bằng các đặc điểm)
quảng cáo 2.
Có thể có xung đột tên. Hai mixin ( MA
và MB
) hoặc đặc điểm ( TA
và TB
) xác định phương thức có cùng định nghĩa foo():void
.
Mixin MA {
foo():void {
print 'hello'
}
}
Mixin MB {
foo():void {
print 'bye'
}
}
Trait TA {
foo():void {
print 'hello'
}
}
Trait TB {
foo():void {
print 'bye'
}
}
Trong mixins, các xung đột trong lớp soạn thảo C mixins MA, MB
được giải quyết hoàn toàn.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Cái này sẽ gọi foo():void
từMA
Mặt khác, trong khi sử dụng Đặc điểm, lớp soạn thảo phải giải quyết xung đột.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Mã này sẽ gây ra xung đột (hai định nghĩa về foo():void
).
quảng cáo 3. Ngữ nghĩa của một phương thức không phụ thuộc vào việc nó được định nghĩa trong một đặc điểm hay trong một lớp sử dụng đặc điểm đó.
Nói cách khác, không có vấn đề gì khi lớp bao gồm các Đặc điểm hoặc mã Traits là "sao chép - dán" vào lớp.
Các trang này giải thích sự khác biệt trong ngôn ngữ lập trình D.
Mixins trong bối cảnh này là mã được tạo ra một cách nhanh chóng, và sau đó được chèn tại điểm đó trong mã trong quá trình biên dịch. Khá tiện dụng cho DSL đơn giản.
Các đặc điểm là các giá trị bên ngoài thời gian biên dịch (chứ không phải mã được tạo từ nguồn bên ngoài). Sự khác biệt là tinh tế. Mixins thêm logic, Traits thêm dữ liệu như thông tin loại thời gian biên dịch.
Không biết nhiều về Ruby, nhưng hy vọng điều này sẽ giúp ích phần nào.