打算从头设计一个矩阵运算库,结果发现面向对象编程与 c++ 差别巨大。搞了两个小时,终于实现了一个最简单的“类”。
1. struct 取代 c++ 的 class
这个不稀奇,因为 c++ 中 struct 与 class 用法几乎一样。但是,rust 的 struct 中只能定义属性,不能定义方法。方法必须用 impl 中定义。
pub struct Vector {
data: Vec<f32>
}
impl Vector {
fn new(value: f32, size: usize) -> Self {
Self{ data: vec![value; size] }
}
}
我给 Vector 定义了一个 new 方法。
2. 添加泛型
我不想让上面的代码仅支持 f32 类型的数据,下面的代码改成了泛型:
use std::vec::Vec;
pub struct Vector<T: Clone> {
data: Vec<T>
}
impl<T: Clone> Vector<T> {
fn new(value: T, size: usize) -> Self {
Self{ data: vec![value; size] }
}
}
其中泛型数据类型 T 需要说明支持 Clone 特性。rust 中的特性类似 c++ 的抽象类。上面的代码说明数据类型 T 必须实现了特性 Clone 才能用于 Vector 这个类型。因为代码刚开始写,后面的 T 还要能够进行数学运算,估计还得需要不断添加其他特性。
因为不了解 rust 中泛型的这个特点,我费了好大的劲才查到资料。加油,继续完成这个矩阵计算包。
原创不易,如果对您有帮助,请关注、点赞,谢谢支持!