gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:04:38 27 4
gpt4 key购买 nike

我对 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com