小编T.S*_*hin的帖子

为什么我的特质定义与2015版本编译而不是与2018版本编译?

我写了这个简单的程序:

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.rsrustc main.rs不会导致此错误,尽管有一些警告.

这段代码有什么问题?

rust rust-2018

8
推荐指数
1
解决办法
86
查看次数

可变引用上的自定义迭代器中的生命周期参数问题

我想实现一个如下所示的自定义迭代器,但无法解决引用问题。

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)

iterator lifetime rust

2
推荐指数
1
解决办法
835
查看次数

标签 统计

rust ×2

iterator ×1

lifetime ×1

rust-2018 ×1