我写了这个简单的程序:
trait Command<T> {
fn execute(&self, &mut T);
}
fn main() {
let x = 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译了这个rustc --edition=2018 main.rs并收到错误消息:
error: expected one of `:` or `@`, found `)`
--> main.rs:2:29
|
2 | fn execute(&self, &mut T);
| ^ expected one of `:` or `@` here
Run Code Online (Sandbox Code Playgroud)
编译通过rustc --edition=2015 main.rs或rustc main.rs不会导致此错误,尽管有一些警告.
这段代码有什么问题?
我想实现一个如下所示的自定义迭代器,但无法解决引用问题。
use itertools::Product;
use std::ops::Range;
struct Iter2DMut<'a, T: 'a> {
data: &'a mut [T],
shape: (usize, usize),
idx_iter: Product<Range<usize>, Range<usize>>,
}
impl<'a, T: 'a> Iterator for Iter2DMut<'a, T> {
type Item = &'a mut T;
fn next(&mut self) -> Option<Self::Item> {
if let Some((i, j)) = self.idx_iter.next() {
Some(&mut self.data[i + self.shape.0 * j])
} else {
None
}
}
}
Run Code Online (Sandbox Code Playgroud)
并收到以下错误消息。
use itertools::Product;
use std::ops::Range;
struct Iter2DMut<'a, T: 'a> {
data: &'a mut [T],
shape: (usize, usize),
idx_iter: Product<Range<usize>, …Run Code Online (Sandbox Code Playgroud)