อะไรคือความแตกต่างระหว่าง Mixins กับลักษณะ?
ตามวิกิพีเดียโมดูลทับทิมมีลักษณะเหมือน งั้นเหรอ
อะไรคือความแตกต่างระหว่าง Mixins กับลักษณะ?
ตามวิกิพีเดียโมดูลทับทิมมีลักษณะเหมือน งั้นเหรอ
คำตอบ:
โฆษณา 1. ในมิกซ์อินคุณสามารถกำหนดตัวแปรอินสแตนซ์ ลักษณะที่ไม่อนุญาตให้ทำเช่นนี้ ต้องจัดเตรียมสถานะโดยการเขียนคลาส (= คลาสโดยใช้คุณลักษณะ)
โฆษณา 2.
อาจมีความขัดแย้งของชื่อ สอง mixins ( MA
และMB
) หรือลักษณะ ( TA
และTB
) 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'
}
}
ใน mixins ความขัดแย้งในการแต่งชั้นเรียนC mixins MA, MB
จะได้รับการแก้ไขโดยปริยาย
Class C mixins MA, MB {
bar():void {
foo();
}
}
สิ่งนี้จะโทรfoo():void
จากMA
ในขณะที่ใช้คุณลักษณะการแต่งคลาสจะต้องแก้ไขข้อขัดแย้ง
Class C mixins TA, TB {
bar():void {
foo();
}
}
รหัสนี้จะเพิ่มความขัดแย้ง (สองคำจำกัดความของfoo():void
)
โฆษณา 3 ความหมายของวิธีการไม่ได้ขึ้นอยู่กับว่ามันถูกกำหนดในลักษณะหรือในชั้นเรียนที่ใช้ลักษณะ
กล่าวอีกนัยหนึ่งมันไม่สำคัญว่าเมื่อใดที่ชั้นเรียนประกอบด้วยลักษณะหรือรหัสลักษณะคือ "คัดลอก - วาง" ลงในชั้นเรียน
หน้าเหล่านี้อธิบายความแตกต่างในภาษา D Programming
มิกซ์อินในบริบทนี้เป็นโค้ดที่สร้างขึ้นทันทีและแทรกที่จุดนั้นในโค้ดระหว่างการคอมไพล์ ค่อนข้างมีประโยชน์สำหรับ DSL อย่างง่าย
ลักษณะเป็นค่าภายนอกเวลารวบรวม (แทนที่จะเป็นรหัสที่สร้างขึ้นจากแหล่งภายนอก) ความแตกต่างนั้นลึกซึ้ง มิกซ์อินเพิ่มตรรกะลักษณะเพิ่มข้อมูลเช่นข้อมูลประเภทเวลารวบรวม
ไม่รู้อะไรเกี่ยวกับทับทิมมากนัก แต่หวังว่ามันจะช่วยได้บ้าง