rust - 如何从数组值创建实例

标签 rust

我对 rust 还很陌生,并且习惯用 JavaScript 等其他语言编写代码。我的项目是编写一个程序,通过 Rust 中的 rppal crate 从我的树莓派控制 cc2500 芯片。到目前为止它有效,但我正在寻找正确的方法。

给定:我有一个无符号 8 位整数列表,需要 Segments 列表延迟 20。

在 JavaScript 中我会这样做

let bytes = [0x7F, 0x55, ...]

let segments = bytes.map(byte => {
    let segment = Segment.with_write([byte]);
    segment.set_delay(20);
    return segment;
});

this.spi.transfer_segments(segments);

在使用rust 中我尝试过这样

let bytes = vec![0x7F, 0x55, ...];

let mut segments:Vec<Segment> = vec![];
for (i, byte) in bytes.iter().enumerate() {
    let buffer = [byte.clone()];
    segments[i] = Segment::with_write(&buffer);
    segments[i].set_delay(20);
}

let written = self.spi.transfer_segments(&segments)
    .expect("Could not write to SPI bus");

但我总是与所有权规则作斗争。 您将如何执行此操作或最佳实践是什么?

最佳答案

由于您的所有切片恰好都是一元的,因此您可以使用 std::slice::from_ref创建它们,指向 bytes 向量中的字节:

let bytes = vec![0x7F, 0x55, ...];

let segments = bytes.iter().map(|byte| {
    let buffer = std::slice::from_ref(byte);
    let mut segment = Segment::with_write(buffer);
    segment.set_delay(20);
    segment
});

let segments: Vec<_> = segments.collect().

let written = self.spi.transfer_segments(&segments)
    .expect("Could not write to SPI bus");

关于rust - 如何从数组值创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762843/

相关文章:

arrays - 暂时将 [u8] 转化为 [u16]

rust - 序列化 null 值或默认值时如何避免生成 JSON?

string - 我如何制作格式!从条件表达式返回 &str?

data-structures - 何时使用 Box<Vec<..>> 或 Vec<Box<..>>?

string - 更喜欢 &str 而不是 String?总是这样吗?

unit-testing - 如何为需要引用“静态生命周期并实现同步”的函数提供模拟值?

rust - impl Stream 不能取消固定

rust - Rust traits 可以部分实现吗?

types - 什么时候需要使用类型注解?

string - 如何在 Option<T> 中延长 T 的生命周期