我目前正在做以下事情:
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];
有没有可能做这样的事情?
let [ip, bytes, int_number] = line.split_whitespace().take(3).collect();
我注意到在一些网站上有各种对矢量解构的引用,但官方文档似乎没有提到它。
最佳答案
看来你需要的是“切片模式”:
fn main() {
let line = "127.0.0.1 1000 what!?";
let v = line.split_whitespace().take(3).collect::<Vec<&str>>();
if let [ip, port, msg] = &v[..] {
println!("{}:{} says '{}'", ip, port, msg);
}
}
注意 if let
而不是普通的 let
。切片模式是可反驳的,因此我们需要考虑到这一点(您可能也希望有一个 else
分支)。
关于vector - 如何从向量中解压(解构)元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32324645/