ยังขำที่โปรแกรม ruby แรกที่เขียน ก็พยายามจะ define interface ทั้งๆที่ ruby มันไม่มี interface แถมยังทำ duck typing ได้
วันก่อนอ่านเจอ feature ของ scala ที่ชื่อ Structural types ใน Scala
รู้สึกว่า งามจริงๆ
ดูตัวอย่างการใช้ Structural Type
class Person {
def say():String = "hi"
}
class Duck {
def say():String = "Quack"
}
object Test {
def play(element: {def say():String}) = {
System.out.println(element.say());
}
def main(args : Array[String]) : Unit = {
play(new Person())
play(new Duck())
}
}
Note: สำหรับคนที่ไม่คุ้นกับ Scala
def คือการกำหนด method, เครื่องหมาย : คือการกำหนด type
กรณี code ข้างล่างนี้, method say มี return type เป็น String
def say():String = "Quack"
ส่วน
Object {...}
ก็คือ Singleton Object
4 comments:
งามแต้ๆจริงๆ
ตรง play มันบอกว่า
จะรับ element class อะไรก็ได้
ที่มีการ def say เอาไว้ใช่ไหมครับ
ผมเข้าใจถูกหรือเปล่า
อืม ตอนผมเขียน python ผมก็ยังติดที่จะเขียน Template class ขึ้นมาอยู่ดีแฮะ ไม่รู้จะแก้ยังไงให้ชินกับการไม่มี interface ดี ><"
iportsut: แม่นแล้ว
งามขนาด :D
ใน JSR 292 เรื่อง invokedynamic ก็มีความพยายามดัน ให้ VM ช่วยเรื่อง structural type อีกแรงเหมือนกันครับ
เรื่องที่ maybe ก็มีเรื่อง tail recursion ที่ถกกันอยู่เพราะเค้าว่ามันน่ากลัวกับ security model ที่ใช้
:D
Post a Comment