gpt4 book ai didi

rust - |难以汇总匹配|

转载 作者:行者123 更新时间:2023-12-03 11:34:08 25 4
gpt4 key购买 nike

我正在尝试打包列数据,以便可以将其发送到服务器。
我希望能够将任何合适的向量传递给发送函数,所以我做到了这一点(简短版本):

enum Column {
Short(Vec<i16>),
Int(Vec<i32>),
}

impl Column {
fn as_bytes(&mut self) -> &[u8] {
use Column::*; // weird
match self {
Short(vec) => unsafe { (vec.align_to::<u8>()).1 }, //why the ::?
Int(vec) => unsafe { (vec.align_to::<u8>()).1 },
}
}
}
这样就可以了。但是,如果我用或管道重写匹配项:
impl Column {
fn as_bytes_succinct(&mut self) -> &[u8] {
use Column::*;

match self {
Short(vec) | Int(vec) => unsafe { (vec.align_to::<u8>()).1 },
}
}
}
我懂了

expected i16, found i32


简短的写作与显式的写作有何不同?

最佳答案

Rust是一种静态类型的语言,因此每个对象在编译时都有一个已知的类型。在上一个示例中,您的匹配项等效于以下代码:

let vec: Vec<???> = match self {
Short(v) | Int(v) => v,
};

unsafe { vec.align_to() }.1
vec应该具有哪种类型?此外, align_to有2种不同的路径,即 <[i16]>::align_to<[i32]>::align_to,它们可能具有 specialization 功能的不同实现。

关于rust - |难以汇总匹配|,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62819390/

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