rust - 如何在结构初始化时运行函数?
问题描述
我有一个结构:
struct MyStruct {
pub a: i32,
pub b: i32,
}
实例化时MyStruct
,我想除以a
2:
let a = MyStruct { a: 26, b: 42 };
println!("{:?}", a);
// MyStruct { a: 13, b: 42 }
它是否有可能自动发生,还是我必须创建一个instantiate
函数并在每次创建时调用它MyStruct
?
解决方案
我想你会想要创建一个模块,就像@eggyal 在评论中建议的那样。这是一个代码示例,说明了如何编写:
#[derive(Debug)]
struct MyStructLiteral {
pub a: i32,
pub b: i32,
}
mod foo {
#[derive(Debug)]
pub struct MyStruct {
a: i32,
b: i32,
}
impl MyStruct {
pub fn new(a: i32, b: i32) -> MyStruct {
MyStruct { a: a / 2, b: b / 2 }
}
}
}
fn main() {
let a = MyStructLiteral { a: 26, b: 42 };
println!("{:?}", a);
let alt = foo::MyStruct::new(26, 42);
println!("{:?}", alt);
}
这是在锈游乐场
输出是:
MyStructLiteral { a: 26, b: 42 }
MyStruct { a: 13, b: 21 }
Steve Klabnik 有一篇很好的博客文章,涵盖了 Rust 中的结构字面量与构造函数
请注意,如果您想调用MyStruct::new
并且不必使用模块名称,则可以use
使用模块,这样您就不必为模块名称添加前缀:
use self::foo::MyStruct;
推荐阅读
- java - 将数据导入 h2db
- php - Laravel Elastic Beanstalk app deployed in CodePipeline giving 500 SERVER ERROR
- android - 是否可以将远程设备连接到 android studio 和 xcode?
- c# - 有没有办法在 NSwag 中自定义订单端点?
- python - 有人知道如何使这段代码工作吗?
- php - 我无法使用字符串键获得选择输入
- javascript - 如何从 azure blob 存储中获取图像作为文件?
- node.js - 将 Angular Universal 9 部署到 Google App Engine
- javascript - 未找到模块会阻止 Truffles 运行测试
- wordpress - 您可以使用 wordpress 的扁平主题删除导航栏中的下拉箭头吗?