Apa perbedaan antara Mixin dan Traits?
Menurut Wikipedia , Modul Ruby adalah semacam sifat suka. Bagaimana?
sumber
Apa perbedaan antara Mixin dan Traits?
Menurut Wikipedia , Modul Ruby adalah semacam sifat suka. Bagaimana?
iklan 1. Dalam mixins Anda dapat mendefinisikan variabel instan. Ciri tidak memungkinkan ini. Status harus disediakan dengan membuat kelas (= kelas menggunakan ciri-ciri)
iklan 2.
Mungkin ada konflik nama. Dua mixin ( MA
dan MB
) atau ciri-ciri ( TA
dan TB
) mendefinisikan metode dengan definisi yang sama 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'
}
}
Dalam mixin konflik dalam penyusunan kelas C mixins MA, MB
diselesaikan secara implisit.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Ini akan menelepon foo():void
dariMA
Di sisi lain saat menggunakan Ciri, membuat kelas harus menyelesaikan konflik.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Kode ini akan menimbulkan konflik (dua definisi foo():void
).
iklan 3. Semantik dari suatu metode tidak tergantung apakah itu didefinisikan dalam suatu sifat atau dalam kelas yang menggunakan sifat tersebut.
Dengan kata lain, tidak masalah apakah kelas terdiri dari Ciri atau kode Ciri adalah "copy - paste" ke dalam kelas.
Halaman-halaman ini menjelaskan perbedaan dalam bahasa Pemrograman D.
http://dlang.org/mixin.html
http://dlang.org/traits.html
Mixin dalam konteks ini adalah kode yang dihasilkan dengan cepat, dan kemudian disisipkan pada titik itu dalam kode selama kompilasi. Cukup praktis untuk DSL sederhana.
Ciri adalah nilai eksternal waktu kompilasi (bukan kode yang dihasilkan dari sumber eksternal). Perbedaannya halus. Mixins menambahkan logika, Sifat menambahkan data seperti informasi jenis waktu kompilasi.
Tidak tahu banyak tentang Ruby, tapi harap ini membantu.
sumber