lần đầu tiên khi tràn ngăn xếp.Trong Ruby hoặc Python, khái niệm về lớp học có thể được viết lại không?
Tôi đang xem xét sử dụng một số tính năng lập trình meta được cung cấp bởi Ruby hoặc Python, nhưng trước tiên tôi cần biết mức độ mà chúng sẽ cho phép tôi mở rộng ngôn ngữ. Điều chính tôi cần làm là viết lại khái niệm Lớp. Điều này không có nghĩa là tôi muốn viết lại một lớp cụ thể trong thời gian chạy, mà đúng hơn là tôi muốn tạo khái niệm của riêng mình về những gì một lớp Lớp là. Để trở thành một cái lò cụ thể hơn ở đây, tôi muốn tạo một cái gì đó là như những gì mọi người thường gọi là Lớp, nhưng tôi muốn tuân theo một giả định "open world". Trong "thế giới khép kín" của các lớp bình thường, nếu tôi tuyên bố Poodle là một lớp con của Dog là một lớp con của Animal, thì tôi biết rằng Poodle cũng không phải là một kiểu FurCoat. Tuy nhiên, trong một Class thế giới mở, thì đối tượng Poodle mà tôi đã định nghĩa có thể hoặc không thể và đối tượng của kiểu FurCoat và chúng tôi sẽ không biết chắc chắn cho đến khi tôi giải thích rằng tôi có thể mặc poodle. (Poodle nghèo.) Tất cả điều này đã làm với một nghiên cứu tôi đang làm liên quan đến ontology OWL.
Để bạn biết, tôi đã cố gắng tìm thông tin trực tuyến, nhưng do quá tải các điều khoản ở đây, tôi không tìm thấy bất kỳ điều gì hữu ích.
Siêu cảm ơn, John
UPDATE: Tôi chỉ nghĩ đến một trường hợp sử dụng tốt cho khái niệm mở thế giới của tôi về Class. Có lẽ điều này sẽ cung cấp một sự hiểu biết tốt hơn về những gì tôi thực sự muốn làm. Tôi muốn có thể "mô tả" một Lớp hơn là xác định nó. Ví dụ, tôi muốn có thể nói rằng một con chó là bất cứ điều gì mà a) có bốn chân b) barks. Sau đó, tôi muốn để có thể tạo ra một đối tượng của lớp không xác định, và mô tả rằng đối tượng này có bốn chân. Tại thời điểm này đối tượng vẫn là loại không xác định. Sau đó, tôi muốn nói rằng đối tượng sủa. Tại thời điểm này, đối tượng sẽ được biết đến là (có thể trong số những thứ khác) một con chó.
Có thể đó là nhiều thừa kế mà bạn đang theo dõi? Điều đó sẽ cho phép 'Poodle' là một lớp con của cả hai' Dog' và 'FurCoat', và kết quả là, phát hiện rằng' Poodle' là một phân lớp của 'Dog' không loại trừ khả năng nó là một lớp con của' FurCoat'. –
Có vẻ như bạn đã quá cố định về ý tưởng sửa đổi lớp học này. Thay đổi cách 'is_a?' Hoạt động trong Ruby để so sánh các trường thay vì các kiểu lớp là có thể và nên làm những gì bạn muốn. –