จำลอง Ad Hoc Polymorphism ด้วย Trait และ Member Constraint

wk
1 min readJul 6, 2020

--

ตัวอย่าง

ต้องการฟังก์ชัน print_hash สำหรับแสดงค่า Hash ของ Object โดยฟังก์ชันนี้จะใช้กับ Object ทุกประเภท โดยมีเงื่อนไขว่า Object ที่ส่งเข้ามาจะต้อง Implement ฟังก์ชัน ชื่อ get_hash() ด้วยเสมอ

Rust

ใช้ Trait ชื่อ Hash โดย Implement ฟังก์ชัน get_hash() ให้กับ Type ที่มีอยู่เดิม เช่น bool และ i64

F#

F# ไม่มี Trait จึงใช้วิธีสร้าง Type ขึ้นใหม่ คือ MyInt และ MyBool โดยทั้งสอง Type มีการ Implement ฟังก์ชัน GetHash() ไว้ด้วย

สำหรับฟังก์ชัน printHash มีการประกาศ Member contraint ไว้ โดย Object ที่ส่งเข้ามาในฟังก์ชันนี้ จะต้องมี Implement GetHash()

จากตัวอย่างจะเห็นว่า printHash สามารถรับ Instance ของ MyInt และ MyBool ได้ทั้งคู่

--

--

No responses yet