Я создаю текстовую монопольную игру в Rust как личный проект. Моя текущая установка состоит в том, чтобы различные типы пространств были их собственными структурами (например, Property
)
use space::Event;
pub struct Property {
message: String,
}
impl Property {
pub fn new() -> Property {
let message = String::from("Hello World!");
Property { message: message }
}
}
impl Event for Property {
fn event(&self) {
print!("{}", &self.message);
}
}
и общая структура Space
, которая содержит экземпляр одного из типов пробелов (например, Space<Property>
или Space<Chance>
).
pub trait Event {
fn event(&self);
}
pub struct Space<T> {
item: T,
}
impl<T: Event> Space<T> {
pub fn new(item: T) -> Space<T> {
Space { item: item }
}
pub fn event(&self) {
&self.item.event();
}
}
Каждый тип пространства реализует черту, которая требует наличия метода «события», который может вызывать общая структура Space. Тогда у меня есть Game
структура, которая будет содержать некоторую коллекцию пробелов (среди прочего).
pub struct Game {
spaces: Vec<Space>, // Does not work
}
К сожалению, у меня возникла проблема с созданием этой коллекции. Независимо от того, что я пробую, он говорит мне, что я должен указать аргумент типа для Space. Как я могу сделать коллекцию структур, которые являются типизированными? Было бы предпочтительнее, если бы я мог вытянуть определенное пространство по его индексу, поскольку это облегчит, когда я начну внедрять определенные карты Chance
, которые перемещают вас в определенные области позже по линии. Извиняюсь, если я упускаю что-то очевидное, я новичок в Rust, поэтому не всегда знаю, что искать.