相关疑难解决方法(0)

由于需求冲突,无法推断autoref的适当生命周期

我在代码中遇到了特定功能的终生问题.我正在学习Rust和SDL的教程.该教程稍微陈旧,SDL库自编写以来已经发生了变化,所以我一直在跟进,同时也适应最新版本的Rust-SDL.

终身问题在于这个功能:

pub fn ttf_str_sprite(&mut self, text: &str, font_path: &'static str, size: i32, color: Color) -> Option<Sprite> {
    if let Some(font) = self.cached_fonts.get(&(font_path, size)) {
        return font.render(text).blended(color).ok()
            .and_then(|surface| self.renderer.create_texture_from_surface(&surface).ok())
            .map(Sprite::new)
    }
    //::sdl2_ttf::Font::from_file(Path::new(font_path), size).ok()
    self.ttf_context.load_font(Path::new(font_path), size as u16).ok()
        .and_then(|font| {
            self.cached_fonts.insert((font_path, size), font);
            self.ttf_str_sprite(text, font_path, size, color)
    })
}
Run Code Online (Sandbox Code Playgroud)

尤其是线路self.ttf_context.load_font(Path::new(font_path), size as u16).ok().上面的注释行是旧的SDL版本的字体加载方法.

error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements
  --> src\phi/mod.rs:57:26
   |
57 |         self.ttf_context.load_font(Path::new(font_path), size as u16).ok()
   |                          ^^^^^^^^^
   |
help: consider …
Run Code Online (Sandbox Code Playgroud)

sdl lifetime rust

18
推荐指数
1
解决办法
8766
查看次数

从Iterator实现调用方法时,无法推断autoref的适当生命周期

我正在尝试实现Iterator一个结构的特征,该结构充当i32值数组的借用者,但我一直在运行编译器抱怨无法在下一个方法中推断出生命周期.

我知道需要帮助理解迭代器的生命周期,但是因为我的结构只是借用了数组的一部分,所以我将实际元素的记忆与我的分开IntegerArrayBag.

#[derive(Debug)]
struct IntegerArrayBag<'a> {
    arr: &'a [i32],
    idx: usize,
}

impl<'a> IntegerArrayBag<'a> {
    fn len(&self) -> usize {
        self.arr.len()
    }

    fn get(&self, idx: usize) -> Option<&i32> {
        if self.arr.len() > idx {
            Some(&self.arr[idx])
        } else {
            None
        }
    }
}

impl<'a> Iterator for IntegerArrayBag<'a> {
    type Item = &'a i32;

    fn next(&mut self) -> Option<&'a i32> {
        let idx = self.idx;
        self.idx += 1;
        self.get(idx)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试编译此代码,编译器会抱怨: …

rust

7
推荐指数
1
解决办法
2343
查看次数

标签 统计

rust ×2

lifetime ×1

sdl ×1