相关疑难解决方法(0)

为什么Rust没有工会?

我可以想到许多地方,C帮助中的工会是有用的,它们可以节省记忆.由于Rust是一种系统编程语言,为什么它不支持工会呢?

rust

27
推荐指数
2
解决办法
9901
查看次数

如何从方法返回特征实例?

我正在尝试创建一个返回Shader特征实例的函数.这是我极为简化的代码:

trait Shader {}

struct MyShader;
impl Shader for MyShader {}

struct GraphicsContext;

impl GraphicsContext {
    fn create_shader(&self) -> Shader {
        let shader = MyShader;
        shader
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error[E0277]: the trait bound `Shader + 'static: std::marker::Sized` is not satisfied
  --> src/main.rs:10:32
   |
10 |     fn create_shader(&self) -> Shader {
   |                                ^^^^^^ `Shader + 'static` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `Shader …
Run Code Online (Sandbox Code Playgroud)

traits rust

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

Rust 中的多种返回类型

我有一个库函数f1rust它返回一个字符串,并希望更新它以选择性地返回一个向量。

fn f1() -> String {
   "abc"
}

fn f2() -> (String, Vec<usize>) {
   "abc", vec![(0, 1, 2)]
}

fn f3(flag: bool) -> ? {
    if (flag)
        "abc", vec![(0, 1, 2)]
    else
        "abc"
}
Run Code Online (Sandbox Code Playgroud)

是否可以有多个返回路径,例如f3

rust

6
推荐指数
1
解决办法
1万
查看次数

方法中的多种返回类型

我想在Rust写一个简单的电视剧集文件重命名器.

解析文件名,可能是几种类型之一(基于日期,季节/剧集编号等).然后,此解析的文件将变为"填充文件",其中包含来自数据库的数据(然后将其格式化为新文件名)

最初我尝试使用该parse方法获取文件名并返回枚举变体:

enum ParsedFile{
    DateBased{series: String, date: Date},
    SeasonBased{series: String, season: i32, episode: i32},
    // etc
}


fn parse(fname:&str) -> Option<ParsedFile>{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这很好,但是ParsedFile为每一集拍摄和做不同的事情的方法变得混乱

例如,要将ParsedFile->PopulatedFile转换分离为单独的方法,我必须匹配变体,然后在方法中对其进行解构

struct PopulatedFile {
    seriesname: String,
    season: i32,
    episode: i32,
    episodename: String,
    airdate: Date,
}

fn _populate_seasonbased(file: ParsedFile) -> Result<PopulatedFile, TvdbError>{
    // can't just access file.season or file.episode, have to destructure enum again
}

fn populate(f: ParsedFile) -> Result<PopulatedFile, TvdbError> {
    return match f {
        ParsedFile::DateBased{..} => 
            _populate_datebased(f),
        // …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
1531
查看次数

标签 统计

rust ×4

traits ×1