と形質とメソッドの互換性がない私は可変構造体を含んで寿命と構造体の世界に進出しています:紛らわしいエラーメッセージ
enum Resources {
Food,
Wood,
Tools,
Ore,
Metal,
}
struct ResourceEntry {
resource: Resources,
amount: i32,
}
impl ResourceEntry {
fn new(resource: Resources, amount: i32) -> ResourceEntry {
ResourceEntry {
resource: resource,
amount: amount,
}
}
}
trait Agent {
fn new<'a>(&'a mut Vec<ResourceEntry>) -> Self;
}
struct Miner<'a> {
inventory: &'a mut Vec<ResourceEntry>,
}
impl<'a> Agent for Miner<'a> {
fn new(starting_resource: &'a mut Vec<ResourceEntry>) -> Miner {
Miner { inventory: starting_resource }
}
}
fn main() {
let mut resource = ResourceEntry::new(Resources::Food, 3);
let mut vec = vec![resource];
let miner: Miner = Miner::new(vec);
miner.perform();
}
私は私がすることはできません、次のエラー
error[E0308]: method not compatible with trait
--> other.rs:47:5
|
47 | fn new(starting_resource: &'a mut Vec<ResourceEntry>) -> Miner
| ^lifetime mismatch
|
= note: expected type `fn(&'a mut std::vec::Vec<ResourceEntry>) -> Miner<'a>`
= note: found type `fn(&'a mut std::vec::Vec<ResourceEntry>) -> Miner<'a>`
note: the lifetime 'a as defined on the block at 48:4...
--> other.rs:48:5
|
48 | {
| ^
note: ...does not necessarily outlive the lifetime 'a as defined on the block at 48:4
--> other.rs:48:5
|
48 | {
| ^
help: consider using an explicit lifetime parameter as shown: fn new(starting_resource: &'a mut Vec<ResourceEntry>) -> Miner
--> other.rs:47:5
|
47 | fn new(starting_resource: &'a mut Vec<ResourceEntry>) -> Miner
| ^
を取得私の人生はコンパイラが私に言っていることを頭の中で包んでいます。エラーメッセージは、私がやっていることを正確に行うことを言っています。たぶん私は誤解していますが、寿命はa
で、寿命はa
と一致しません。私は借用とオーナーシップをかなりよく理解していると思ったが、他のオブジェクトを参照する明示的なライフタイムとオブジェクトの使用は混乱している。
は私が正しく寿命を受け入れるために、新たな取得とのトラブルがあった問題
fn new<'a>(&'a mut Vec) -> Self;
であり、これはあなたがルーストにやるべきものではない場合、私は思ったんだけど?
恐ろしい!それはそれだった。私はエラーを報告することを確認します。 ちょうど私は何が起こったのか正確に知っているので、Agent Agent for Minerとの互換性はありませんでした。だから、実装で新しくコンパイルしようとしていたときに、Agent :: newからの生存期間があったことが判明しました。しかし、生涯が出力にないので、それは分かりませんでした。特性レベルでの寿命は、あなたがimplブロック内の生涯を関連付けることを可能にし、エージェントが鉱夫と同じ寿命を持つと言うことができますか? – Erik
@Erikがより多くのテキストで更新されました。 – Shepmaster