私はボットを作っています。ボットがメッセージを受信すると、メッセージをトリガーする場合はすべてのコマンドをチェックする必要があり、そうであればアクションを実行する必要があります。ボックス化された形質オブジェクトのベクターを他のベクターから作成する方法は?
だから私は、メイン構造体にあるコマンドのベクトル(Command
形質を)持っている:私は、トリガコマンドのリストを作成すると(&self mut)
方法で、後でそれらを使用しようとするまで
struct Bot {
cmds: Vec<Box<Command>>,
}
すべてが良いです:
let mut triggered: Vec<Box<command::Command>>;
for c in &self.cmds {
if c.check(&message) {
triggered.push(c.clone());
}
}
エラー:
bot.rs:167:44: 167:56 error: mismatched types:
expected `Box<Command>`,
found `&Box<Command>`
(expected box,
found &-ptr) [E0308]
私は何をやっていますここで間違っている?私はたくさん試しましたが、何も助けません。 は当初、私は次のことをやっていた:
for c in &self.cmds {
if c.check(&message) {
c.fire(&message, self);
}
}
が、それは私を与えた:
bot.rs:172:46: 172:50 error: cannot borrow `*self` as mutable because `self.cmds` is also borrowed as immutable [E0502]
bot.rs:172
c.fire(&message, self);
だから私はそれをstackoverflowedし、上記溶液に来ました。
誰が問題にあなたを再現することを可能にすること[MCVE]してください持っている。さもなければ私たちは間違ったことを作り出すことができるコードを作るために多くの推測をしなければなりません。 – Shepmaster
まず、Vec>を作るべきではありません。ベクターがそのすべての要素をヒープ上に割り当てるので、それらを再度ボクシングすると要素の作成が遅くなるからです。 –