Tôi muốn lập trình một trò chơi và muốn sử dụng mẫu thành phần cho nhiều thực thể.Nim - Tạo chuỗi các đối tượng thực hiện phương thức
Trong ngôn ngữ có giao diện/loại-lớp/đa kế thừa, sẽ không có vấn đề gì.
Tôi muốn một số thực thể có thể cập nhật nhưng không thể hiển thị và một số phải là cả hai.
Haskell:
class Updateable a where
update :: Float -> a -> a
class Renderable a where
render :: a -> Picture
class InputHandler a where
handleInput :: Event -> a -> a
tôi có thể tạo ra một danh sách những thứ mà có thể được cập nhật.
updateAll :: Updateable a => Float -> [a] -> [a]
updateAll delta objs = map (update delta) objs
Trong Java/D/... này có thể được thực hiện thông qua giao diện
interface Updateable {
void update(float delta);
}
// somewhere in a method
List<Updateable> objs = ...;
for (Updateable o : objs) {
o.update(delta);
}
Bây giờ tôi tự hỏi như thế nào điều này có thể được thực hiện trong nim với multimethods.
Liệu sự tồn tại của đa phương thức phù hợp có thể được thể hiện bằng một loại không?
var objs: seq[???] = @[]
Chỉnh sửa: Thêm nhiều mã và cố định không chính xác Haskell dụ
Có vẻ như [khái niệm] (http://nim-lang.org/docs/manual.html#generics-concepts) là cách để đi, nhưng chúng vẫn là WIP và tôi không thể tạo một 'seq [Cập nhật được] '. 'loại Updateable = khái niệm x cập nhật (x)' – Karroffel
Không rõ chính xác bạn muốn sử dụng đa thừa kế trong ví dụ của bạn như thế nào. Ví dụ, tại sao không đơn giản là không làm gì nếu một thành phần không "implement" render() hoặc update()? Nhìn vào các kiến trúc dựa trên thành phần của các engine phổ biến (Unity3d, UE4), chúng không sử dụng các giao diện cho các lớp cốt lõi mà người dùng thực hiện - dễ nghĩ hơn về kiểu "Thành phần" đơn nhất so với nhiều giao diện có thể cần thực hiện. – endragor