gpt4 book ai didi

operator-overloading - Rust 看不到我重载的 f64 乘法运算符

转载 作者:行者123 更新时间:2023-11-29 08:01:23 25 4
gpt4 key购买 nike

我正在用 Rust 实现一个简单的矩阵库,目前正在编写标量乘法运算符。右乘法有效:

impl<T: Num + Zero + Clone + Float> Mul<T, Mat<T>> for Mat<T> {
fn mul(&self, rhs: &T) -> Mat<T> {
self.componentwise(|v| v.clone() * *rhs)
}
}

但我似乎不能进行左乘,我假设下面的代码会做我想做的:

impl<T: Num + Zero + Clone + Float> Mul<Mat<T>, Mat<T>> for T {
fn mul(&self, rhs: &Mat<T>) -> Mat<T> {
rhs.componentwise(|v| *self * v.clone())
}
}

但以下不起作用:

let A = mat![[1f64, 2., 3.], [4., 5., 6.]];
let P = A * 4f64; // works!
let Q = 4f64 * A; // error...

错误是error: mismatched types: expected `f64`, found `linalg::Mat<f64>` (expected f64, found struct linalg::Mat) .我只能有 f64 * f64 乘法,还是我接近第二种情况是错误的?我尝试使用 impl Mul<Mat<f64>, Mat<f64>> for f64 专门为 f64 实现它,但这仍然不起作用。

我发现我可以使用 4f64.mul(&A) 让它工作,但这并不理想。

最佳答案

可能与声明有关:您的第二个实现声明是针对 Mult<Mat<T>, Mat<T>> 的,所以我的猜测是它允许将两个矩阵相乘,这不是您想要的。

(我想发表评论,但我还不能这样做:()

关于operator-overloading - Rust 看不到我重载的 f64 乘法运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043750/

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