What is `|slice|`?

  • 本文关键字:slice is What rust
  • 更新时间 :
  • 英文 :


谁能给我解释一下这个声明中的|slice|是如何工作的?来源(35):https://gist.github.com/madhavanmalolan/b30b47640449f92ea00e4075d63460a6

let amount = rest_of_data
.get(..8)
.and_then(|slice| slice.try_into().ok())
.map(u64::from_le_bytes)
.unwrap();

这段代码尝试将字节数组转换为u64

let amount = rest_of_data  // &[u8]
.get(..8)                // Option<&[u8]>
.and_then(|slice /* &[u8] */ | slice.try_into().ok()) // Option<[u8; _]>
.map(u64::from_le_bytes) // Option<u64>
.unwrap();

rest_of_data[u8]的引用。get(..8)方法尝试获取rest_of_data的前8个元素,返回Option<&[u8]>(如果片中至少有8个元素,则返回Some,如果片中少于8个元素,则返回None)

至于你的问题;

要使用u64::from_le_bytes将一些字节转换为u64,您的输入需要是一个拥有的值,而不是引用。通过在Option<&[u8]>上调用.and_then(f),你给闭包fSome(val)中的val,在这种情况下它是&[u8]。闭包f接受一个参数(在本例中名为slice)并返回闭包结果。然后用.map()方法将这个返回值馈送给u64::from_le_bytes

由于u64::from_le_bytes接受一个拥有的值,因此需要将字节片转换为拥有的类型,这就是闭包对.try_into()函数所做的。它给你一个字节数组。

相关内容

  • 没有找到相关文章

最新更新