相关疑难解决方法(0)

如何在不切片的情况下解构向量?

我可以通过获取向量的切片和对元组中项目的引用来解构元组向量:

let items = vec![("Peter".to_string(), 180)];

if let [(ref name, ref age)] = items.as_slice() {
    println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud)

如何直接解构向量,将项目移出元组。像这样的东西:

let items = vec![("Peter".to_string(), 180)];

if let [(name, age)] = items {
    println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud)

编译上述结果导致错误:

let items = vec![("Peter".to_string(), 180)];

if let [(ref name, ref age)] = items.as_slice() {
    println!("{} scored {}", name, age);
};
Run Code Online (Sandbox Code Playgroud)

vector pattern-matching destructuring slice rust

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

结果得到意外的类型参数

我试图从文件中读取值以创建一个结构体,但我遇到了一对奇怪的错误。我的代码的超级基本实现:

extern crate itertools;

use itertools::Itertools;
use std::io::{self, prelude::*, BufReader};
use std::fs::{self, File};

// The struct I will unpack into
struct BasicExample {
    a: String,
    b: String,
    c: String,
    d: String,
}

impl BasicExample {
    pub fn new(a: String, b: String, c: String, d: String} -> Self {
        BasicExample {
            a, b, c, d
        }
    }

    // I'm expecting that reading from the config file might fail, so
    // I want to return a Result that can be unwrapped. Otherwise …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
2
解决办法
2433
查看次数

如何从向量中解包(解构)元素?

我目前正在做以下事情:

let line_parts = line.split_whitespace().take(3).collect::<Vec<&str>>();
let ip = line_parts[0];
let bytes = line_parts[1];
let int_number = line_parts[2];
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

let [ip, bytes, int_number] = line.split_whitespace().take(3).collect();
Run Code Online (Sandbox Code Playgroud)

我注意到在某些网站上对矢量解构的各种引用,但官方文档似乎没有提到它.

iterator vector rust

5
推荐指数
2
解决办法
1148
查看次数

如何将 vec 中的 n 个项目解构为变量?

在 JavaScript 中,我可以通过以下方式解构数组:

const [first, second, ...rest] = myArray
Run Code Online (Sandbox Code Playgroud)

Rust 是否有类似的方法来实现这一目标?

如果我只想要一个元素,那很简单。我可以:

let first = my_vec[0];
Run Code Online (Sandbox Code Playgroud)

或者,如果我从字符串创建一个数组,并且只想将 i 拆分为两部分,我可以这样做并用它获取一个元组(如果我只需要将数组拆分为两部分):

let (first, second) = my_string.split_once("\n").unwrap();
Run Code Online (Sandbox Code Playgroud)

但是更一般的解构模式怎么样,我可以忽略数组的一部分并定义一些变量并准备好使用?

我期待它看起来像这样:

let [first, second, ...] = my_vec;
Run Code Online (Sandbox Code Playgroud)

或者

let [first, ..middle, second_last, last] = my_vec;
Run Code Online (Sandbox Code Playgroud)

PS:忘记 - 部分unwrap。我知道我应该处理该错误,但这不是重点。

我尝试使用匹配表达式,但没有成功。它期望数组的长度为 2。

let [first, second] = match my_vec[..] {
    [first, second] => [first, second],
    v => v,
};
Run Code Online (Sandbox Code Playgroud)

我抱怨v并说: `match` arms have incompatible types expected array `[&str; 2]`, found slice `[&str] …

vector rust destructure

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