gpt4 book ai didi

rust - 有没有更快/更短的方法来初始化 Rust 结构中的变量?

转载 作者:行者123 更新时间:2023-11-29 07:40:01 26 4
gpt4 key购买 nike

在下面的示例中,我更愿意在字段声明中为结构中的每个字段分配一个值。或者,它实际上需要为每个字段附加一个语句来为字段赋值。我想要做的就是在实例化结构时分配默认值。

有没有更简洁的方法来做到这一点?

struct cParams {
iInsertMax: i64,
iUpdateMax: i64,
iDeleteMax: i64,
iInstanceMax: i64,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}

impl cParams {
fn new() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}

最佳答案

您可以通过实现 Default 为您的结构提供默认值特征。 default函数看起来像你当前的 new功能:

impl Default for cParams {
fn default() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}

然后您可以通过仅提供非默认值来实例化该结构:

let p = cParams { iInsertMax: 10, ..Default::default() };

通过对数据结构进行一些细微的更改,您可以利用自动派生的默认实现。如果你使用 #[derive(Default)]在数据结构上,编译器会自动为你创建一个默认函数,用它的默认值填充每个字段。默认 bool 值为false,默认整数值为0。

整数的默认值为 0 在这里是一个问题,因为您希望整数字段默认为 -1。您可以定义一个实现默认值 -1 的新类型,并使用它代替 i64在你的结构中。 (我还没有测试过,但它应该可以工作)。

但是,我建议稍微更改您的数据结构并使用 Option<i64>而不是 i64 .我不知道您的代码的上下文,但看起来您正在使用 -1 的特殊值来表示特殊含义“无限”或“没有最大值”。在 Rust 中,我们使用 Option代表可选的现值。不需要 -1 hack。选项可以是 NoneSome(x)其中 x 是你的 i64这里。如果 -1 是唯一的负值,它甚至可能是一个无符号整数。默认 Option值为 None ,因此根据建议的更改,您的代码可能如下所示:

#[derive(Default)]
struct cParams {
iInsertMax: Option<u64>,
iUpdateMax: Option<u64>,
iDeleteMax: Option<u64>,
iInstanceMax: Option<u64>,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}

let p = cParams { iInsertMax: Some(10), ..Default::default() };

关于rust - 有没有更快/更短的方法来初始化 Rust 结构中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19650265/

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