相关疑难解决方法(0)

什么"`str`没有在编译时知道的常量大小"是什么意思,什么是最简单的修复方法?

我正在尝试操作从函数参数派生的字符串,然后返回该操作的结果:

fn main() {
    let a: [u8; 3] = [0, 1, 2]; 
    for i in a.iter() {
        println!("{}", choose("abc", *i));
    }
}

fn choose(s: &str, pad: u8) -> String {
    let c = match pad {
        0 => ["000000000000000", s].join("")[s.len()..],
        1 => [s, "000000000000000"].join("")[..16],
        _ => ["00", s, "0000000000000"].join("")[..16],
    };
    c.to_string()
}
Run Code Online (Sandbox Code Playgroud)

在构建时,我收到此错误:

error[E0277]: the trait bound `str: std::marker::Sized` is not satisfied
 --> src\main.rs:9:9
  |
9 |     let c = match pad {
  |         ^ `str` does not have a …
Run Code Online (Sandbox Code Playgroud)

string pointers rust

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

过滤使用 fs::read_dir() 发现的文件或目录

我有这个功能:

fn folders(dir: &Path) -> Result<Vec<PathBuf>, io::Error> {
    fs::read_dir(dir)?
        .into_iter()
        .map(|x| x.map(|entry| entry.path()))
        .collect()
}
Run Code Online (Sandbox Code Playgroud)

其实是从这里借来的。功能正常;不幸的是,我不太明白它是如何工作的。

Ok(["/home/ey/dir-src/9", "/home/ey/dir-src/11", "/home/ey/dir-src/03 A Letter of Explanation.mp3", "/home/ey/dir-src/02 Egyptian Avenue.mp3", "/home/ey/dir-src/alfa", "/home/ey/dir-src/10"])
Run Code Online (Sandbox Code Playgroud)

测试输出显示目录和文件,正如它应该的那样。我不知道在哪里放置文件/目录过滤。我不明白为什么映射里面的映射:它不只是一个简单的路径列表吗?这个表达式中到底发生了什么?

更新:

fn folders(dir: &Path) -> Result<Vec<PathBuf>, io::Error> {
    fs::read_dir(dir)?
        .into_iter()
        .map(|x| x.map(|entry| entry.path()))
        .filter(|x| {x.as_ref().map(|entry| entry); true})
        .collect()
}
Run Code Online (Sandbox Code Playgroud)

插入一个简单的过滤器(总是true)。它至少正在编译,但我仍然不知道应该如何使用entry文件/目录检查。对不起 :)

iteration mapping filtering file rust

4
推荐指数
1
解决办法
5589
查看次数

标签 统计

rust ×2

file ×1

filtering ×1

iteration ×1

mapping ×1

pointers ×1

string ×1