迭代 Rust 中的结构向量
Posted
技术标签:
【中文标题】迭代 Rust 中的结构向量【英文标题】:Iterate over vector of structs in Rust 【发布时间】:2021-11-24 00:33:42 【问题描述】:我正在尝试调试我的设备在 Rust 中无法在我的 MacOS BigSur 笔记本电脑上被识别的原因。我已经运行了我的 Python 代码来验证它是否存在,尽管它无法被读取,这很奇怪。由于 Rust 有串口库,而且它似乎比 PyUSB 强大得多,所以我决定使用它。
我使用的代码取自一个在 x86_64 处理器上运行的预先存在的项目,Big Sur 使用 Apples M1 芯片。
代码如下:
#[cfg(not(feature = "fake_serial"))]
pub fn start_serial_probe(
custom_tty: &Option<String>,
// ) -> Result<crossbeam_channel::Receiver<B0xxMessage>, ViewerError>
)
let b0xx_port = serialport::available_ports();
for port in &b0xx_port
// let port : serialport::SerialPortInfo = port;
println!(" ", port.port_name);
...
编译时的错误与我在 VSCode 中收到的错误相同。
&std::vec::Vec<serialport::SerialPortInfo>
类型上没有字段 port_name
我不完全确定如何通过向量抓取项目,因为大多数使用整数等某种类型的数组。
谢谢!
【问题讨论】:
【参考方案1】:函数serialport::available_ports()
返回Result<Vec<SerialialPortInfo>>
,而不是Vec<SerialPortInfo>
。
这里的混淆可能是因为Result
实现了IntoIterator
,并且循环它会产生一个或零个元素,具体取决于它分别是Ok
还是Err
。在这种情况下,该项目是 Vec
,这就是您无法访问 SerialialPortInfo
字段的原因。
这应该可行:
if let Ok(b0xx_port) = serialport::available_ports()
for port in &b0xx_port
println!(" ", port.port_name);
else
// handle the error
【讨论】:
太棒了,以后我得注意扩展结果了。以上是关于迭代 Rust 中的结构向量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rust 中修复“.. 在循环的上一次迭代中可变地借用”?