types - 如何在 Rust 中创建包装向量的新实例?

标签 types rust

我想创建自己的向量 struct,这样我就可以附加额外的方法。

pub struct MyStructVec(pub Vec<MyStruct>);

完成此操作后,如何创建此向量的新实例?

MyStructVec::new() 无法识别。现有的矢量创建方法将如何与这种类型一起使用? (new, with_capacity...等)

最佳答案

新类型“隐藏”了它的内部结构。您无法透明地进入内部。创建 MyStructVec 的新对象,你需要调用内部类型的构造函数然后包装它:

MyStructVec(Vec::new())

MyStructVec(Vec::with_capacity(42))

创建此类对象后,您可以通过实现 Deref 来稍微透明地使用该对象和 DerefMut适合你的类型:

impl std::ops::Deref for MyStructVec {
    type Target = Vec<MyStruct>;
    fn deref(&self) -> &Vec<MyStruct> {
        &self.0
    }
}

impl std::ops::DerefMut for MyStructVec {
    fn deref_mut(&mut self) -> &mut Vec<MyStruct> {
        &mut self.0
    }
}

so I can attach extra methods

那不是使用新类型的方式。新类型用于类型安全。如果你想要的只是所有 Vec<MyStruct>有新方法,创建扩展特征:

trait VecMyStructExt {
    fn foo(&self);
}
impl VecMyStructExt for Vec<MyStruct> {
    fn foo(&self) { println!("foo"); }
}

关于types - 如何在 Rust 中创建包装向量的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925296/

相关文章:

java - 混合 Scala 和 Java : How to get generically typed constructor parameter right?

dart - 如何在Dart FFI中使用 bool 类型?

module - 如何跨模块文件使用宏?

rust - Rust函数语法问题,示例出现在nom中

php - 如何更改mysql数据类型?

reactjs - Typescript 输入 onchange event.target.value

c# - 创建可用作函数/方法的类型

rust - 用 cargo 构建子模块二进制箱

rust - 如何修复 `` Entirely Too Many Lists'' 第 2 章中损坏的 use 语句?

c++ - 为什么双倍数应该是正数却为负数?