1
私は形質を使ってマトリックスを加えています。ジェネリック型の不一致に悩まされています。私のコードは次のとおりです。錆の中の形質を使った一般的なタイプの不一致
error[E0308]: mismatched types
--> src/main.rs:36:23
|
36 | sum = *num1 + *num2;
| ^^^^^^^^^^^^^ expected i32, found type parameter
|
= note: expected type `i32`
= note: found type `T`
error[E0308]: mismatched types
--> src/main.rs:41:9
|
41 | Matrix {
| ^expected type parameter, found i32
|
= note: expected type `Matrix<T>`
= note: found type `Matrix<i32>`
私の考え:
num1
ベクトルをDEREFと整数になるだろうuse std::{ops, fmt}; #[derive(PartialEq, Debug)] pub struct Matrix<T> { data: Vec<T>, row: usize, col: usize, } impl<T: Copy> Matrix<T> { /// Creates a new matrix of `row` rows and `col` columns, and initializes /// the matrix with the elements in `values` in row-major order. pub fn new(row: usize, col: usize, values: &[T]) -> Matrix<T> { Matrix { data: values.to_vec(), // make copy and convert &[T] to vector type row: row, col: col, } } } impl<T: ops::Add<Output = T> + Copy> ops::Add for Matrix<T> { type Output = Self; /// Returns the sum of `self` and `rhs`. If `self.row != rhs.row || self.col != rhs.col`, panic. fn add(self, rhs: Self) -> Self::Output { assert!(self.col == rhs.col); assert!(self.row == rhs.row); let mut newdata = Vec::new(); // make a new vector to store result let mut sum: i32; // temp variable to record each addition for num1 in self.data.iter() { for num2 in rhs.data.iter() { sum = *num1 + *num2; newdata.push(sum) } } Matrix { data: newdata, // finally, return addition result using new_data row: self.row, col: self.col, } } } fn main() { let x = Matrix::new(2, 3, &[-6, -5, 0, 1, 2, 3]); let y = Matrix::new(2, 3, &[0, 1, 0, 0, 0, 0]); // z = x + y; }
プログラムのコンパイル、私は型の不一致についての2つのエラーを得ましたそれで、結果を記録するために合計を使用するのです。
- 私は関数の最後に
Matrix
型の値を返そうとしています。
何が問題になりますか?