私は単純なインタプリタをRustで作成しようとしています。ここにコードスニペットがあります。ベクトルから要素を返すときのエラーE0495
use std::vec::Vec;
use std::option::Option;
use std::borrow::Borrow;
trait Data {}
trait Instruction {
fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data>;
}
struct Get {
stack_index: usize,
}
impl Instruction for Get {
fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data> {
Some(stack[self.stack_index].borrow())
}
}
fn main() {}
上記は単純なGet
命令を含んでいます。これはrun
メソッドを持ち、単にData
というスタックから値を返します。 Data
は、本当にどんなタイプのデータでも表す抽象的な特性です。私はまだData
を実装していません。しかし、コードをコンパイル
は、私が何をしないのですE0495
error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in function call due to conflicting requirements
--> <anon>:17:14
|
17 | Some(stack[self.stack_index].borrow())
| ^^^^^^^^^^^^^^^^^^^^^^^
|
note: first, the lifetime cannot outlive the anonymous lifetime #2 defined on the body at 16:63...
--> <anon>:16:64
|
16 | fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data> {
| ________________________________________________________________^ starting here...
17 | | Some(stack[self.stack_index].borrow())
18 | | }
| |_____^ ...ending here
note: ...so that reference does not outlive borrowed content
--> <anon>:17:14
|
17 | Some(stack[self.stack_index].borrow())
| ^^^^^
note: but, the lifetime must be valid for the anonymous lifetime #1 defined on the body at 16:63...
--> <anon>:16:64
|
16 | fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data> {
| ________________________________________________________________^ starting here...
17 | | Some(stack[self.stack_index].borrow())
18 | | }
| |_____^ ...ending here
note: ...so that expression is assignable (expected std::option::Option<&Data>, found std::option::Option<&Data>)
--> <anon>:17:9
|
17 | Some(stack[self.stack_index].borrow())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
エラーコードを生成しますか?
お返事ありがとうございます!しかし、私が正しく理解していれば、[これはうまくいかない:/](https://play.rust-lang.org/?gist=2dc89d594443628eb548d5e75e1fcfc3&version=stable&backtrace=0) – Abogical
@Abogicalあなたは[特性定義を変更する必要がありますと実装](https://play.integer32.com/?gist=d619b6bbc9a32a0755cc4aa7f80cdbe3&version=stable);私は答えのその点を明確にしました。 – Shepmaster
ああ、ダムの間違いで申し訳ありません、ありがとう! – Abogical