【问题标题】:Iterate over vector of structs in Rust迭代 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 中收到的错误相同。

&amp;std::vec::Vec&lt;serialport::SerialPortInfo&gt; 类型上没有字段 port_name

我不完全确定如何通过向量抓取项目,因为大多数使用整数等某种类型的数组。

谢谢!

【问题讨论】:

    标签: vector struct rust


    【解决方案1】:

    函数serialport::available_ports() 返回Result&lt;Vec&lt;SerialialPortInfo&gt;&gt;,而不是Vec&lt;SerialPortInfo&gt;

    这里的混淆可能是因为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
    }
    

    【讨论】:

    • 太棒了,以后我得注意扩展结果了。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-06-28
    • 2021-08-18
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    相关资源
    最近更新 更多