相关疑难解决方法(0)

如何压缩两个以上的迭代器?

是否有更直接,更易读的方法来完成以下任务:

fn main() {
    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let c = [7, 8, 9];
    let iter = a.iter()
        .zip(b.iter())
        .zip(c.iter())
        .map(|((x, y), z)| (x, y, z));
}
Run Code Online (Sandbox Code Playgroud)

也就是说,如何从n个迭代中构建迭代器,从而产生n元组?

iterator rust

23
推荐指数
2
解决办法
5188
查看次数

有没有办法链接结果映射和解包?

我有这个代码.

if let Ok(file) = env::var("CONF") {
    if let Ok(mut reader) = fs::File::open(&file) {
        if let Ok(conf) = Json::from_reader(&mut reader) {
            // do something with conf
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图让它不像一个节日假日树,并考虑链接.注意,在这个链条的每一步产生另一种Result,所以显然这是不行的(我们得到ResultResult).

let conf = env::var("CONF")
    .map(fs::File::open)
    .map(Json::from_reader);

// do something with conf
Run Code Online (Sandbox Code Playgroud)

另外我的错误类型的每一步,这意味着我不能只更换不同.map使用.and_then.

我想我正在寻找类似于JavaScript承诺的东西.也就是说,从承诺内部返回的承诺揭开了内在的承诺.签名可能应该是这样的:

impl<T, E> Result<T, E> {
    fn map_unwrap<F, U, D>(&self, op: F) -> Result<U, D>
        where F: FnOnce(T) -> Result<U, D>
}
Run Code Online (Sandbox Code Playgroud)

Rust中有这样的机制吗?有没有另一种方法摆脱我的节日假日树?

rust

7
推荐指数
2
解决办法
1348
查看次数

Rust 2018是否支持"if let"链接?

我正在解析一个令牌的矢量,每个枚举类型.这意味着我得到了很多代码:

if v.len() >= 3 {
    if let Token::Type1(value1) = &v[0] {
        if let Token::Type2(value2) = &v[1] {
            if let Token::Type(value3) = &v[2] {
                return Parsed123(value1, value2, value3);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这非常难看 - 我已经知道我可以做到这一点,使它更好一点:

if v.len() >= 3 {
    if let (Token::Type1(value1), Token::Type2(value2), Token::Type3(value3)) =
        (&v[0], &v[1], &v[2])
    {
        return Parsed123(value1, value2, value3);
    }
}
Run Code Online (Sandbox Code Playgroud)

但老实说,它并没有好多少.

然而,有一些封闭的问题/ RFC用于链接这些条件,并且"如果让"位在感觉更符合人体工程学的方式 - eRFC 2497的跟踪问题"if- and while-let-chains取2"并且支持&& in if让表达式 - 这会让我写下这样的东西:

if v.len() >= 3 &&
    let Token::Type1(value1) = &v[0] && …
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
3
解决办法
763
查看次数

标签 统计

rust ×3

iterator ×1