Multidimensional array 如何在&;之间进行减法运算;ndarray::阵列1<;f64>;及;mut阵列1<;f64>;?
我发现不可变数组引用和可变数组引用之间的减法不可能使用:Multidimensional array 如何在&;之间进行减法运算;ndarray::阵列1<;f64>;及;mut阵列1<;f64>;?,multidimensional-array,rust,rust-crates,Multidimensional Array,Rust,Rust Crates,我发现不可变数组引用和可变数组引用之间的减法不可能使用: #[宏使用] 外部板条箱; 使用ndarray::Array1; fn main(){ 设a:&Array1=&array![3.0,2.0,1.0]; 设b:&mut数组1=&mut数组![1.0,1.0,1.0]; 设c=a-&b.view();//编译 设d=a-b;//编译失败 } 我收到的错误消息是: 设d=a-b; ^'f64-&mut-ndarray::ArrayBase未实现` 我不明白这两种类型是什么意思,但有没有什
#[宏使用]
外部板条箱;
使用ndarray::Array1;
fn main(){
设a:&Array1=&array![3.0,2.0,1.0];
设b:&mut数组1=&mut数组![1.0,1.0,1.0];
设c=a-&b.view();//编译
设d=a-b;//编译失败
}
我收到的错误消息是:
设d=a-b;
^'f64-&mut-ndarray::ArrayBase未实现`
我不明白这两种类型是什么意思,但有没有什么特殊的原因使它不能实现 不为&mut
参数实现(它用于对其他数组的不可变引用)。不需要它,因为不应修改右撇子值。第二个操作数是&mut数组
,它最终是类型弱化为不可变引用不会自动发生的情况之一。仍然可以显式重新箭头显示值:
let a: &Array1<f64> = &array![3.0, 2.0, 1.0];
let b: &mut Array1<f64> = &mut array![1.0, 1.0, 1.0];
let c = a - &b.view();
let d = a - &*b;
未为&mut
参数实现(它用于对其他数组的不可变引用)。不需要它,因为不应修改右撇子值。第二个操作数是&mut数组
,它最终是类型弱化为不可变引用不会自动发生的情况之一。仍然可以显式重新箭头显示值:
let a: &Array1<f64> = &array![3.0, 2.0, 1.0];
let b: &mut Array1<f64> = &mut array![1.0, 1.0, 1.0];
let c = a - &b.view();
let d = a - &*b;
完整的错误消息是:
error[E0277]:未满足特性绑定'f64:std::ops::Sub'
-->src/main.rs:10:15
|
10 |设d=a-b;
|^f64-&mut-ndarray::ArrayBase没有实现`
|
=帮助:`f64未实现特性`std::ops::Sub``
=注意:由于“&ndarray::ArrayBase”的“std::ops::Sub”impl上的要求,因此需要`
错误[E0277]:不满足特性绑定“%mut-ndarray::ArrayBase:ndarray::ScalarOperand`
-->src/main.rs:10:15
|
10 |设d=a-b;
|^trait`ndarray::ScalarOperand`未为`&mut ndarray::ArrayBase'实现`
|
=注意:由于“&ndarray::ArrayBase”的“std::ops::Sub”impl上的要求,因此需要`
第一条错误消息对我来说相当模糊,但第二条更具启发性:
“&mut-ndarray::ArrayBase”未实现traitndarray::ScalarOperand
此错误的原因是Rust在匹配特征时不执行强制:如果存在某个类型U
的impl和T
强制到U
,则不构成T
的实现(直接复制自)
在没有进入ndarray内部的情况下,这是一个再现相同问题的最小示例:
trait MyShape {}
fn foo<T: MyShape>(x: T) -> T {
x
}
impl<'a> MyShape for &'a i32 {}
fn main() {
let mut num = 1;
let arg: &mut i32 = &mut num;
foo(arg);
}
trait MyShape{}
fn foo(x:T)->T{
x
}
impl src/main.rs:12:5
|
12 | foo(arg);
|^^^ `&mut i32未实现特性'MyShape'`
|
=帮助:找到了以下实现:
完整的错误消息是:
error[E0277]:未满足特性绑定'f64:std::ops::Sub'
-->src/main.rs:10:15
|
10 |设d=a-b;
|^f64-&mut-ndarray::ArrayBase没有实现`
|
=帮助:`f64未实现特性`std::ops::Sub``
=注意:由于“&ndarray::ArrayBase”的“std::ops::Sub”impl上的要求,因此需要`
错误[E0277]:不满足特性绑定“%mut-ndarray::ArrayBase:ndarray::ScalarOperand`
-->src/main.rs:10:15
|
10 |设d=a-b;
|^trait`ndarray::ScalarOperand`未为`&mut ndarray::ArrayBase'实现`
|
=注意:由于“&ndarray::ArrayBase”的“std::ops::Sub”impl上的要求,因此需要`
第一条错误消息对我来说相当模糊,但第二条更具启发性:
“&mut-ndarray::ArrayBase”未实现traitndarray::ScalarOperand
此错误的原因是Rust在匹配特征时不执行强制:如果存在某个类型U
的impl和T
强制到U
,则不构成T
的实现(直接复制自)
在没有进入ndarray内部的情况下,这是一个再现相同问题的最小示例:
trait MyShape {}
fn foo<T: MyShape>(x: T) -> T {
x
}
impl<'a> MyShape for &'a i32 {}
fn main() {
let mut num = 1;
let arg: &mut i32 = &mut num;
foo(arg);
}
trait MyShape{}
fn foo(x:T)->T{
x
}
impl src/main.rs:12:5
|
12 | foo(arg);
|^^^ `&mut i32未实现特性'MyShape'`
|
=帮助:找到了以下实现:
请问您是如何复制错误消息的?它们在|
之前丢失了空格(它们都应该对齐)。我已经看到了很多,但不知道是什么原因造成的。我将终端的输出复制到visual studio代码中,选择了“全部”,并在所选文本中添加了一个选项卡(4个空格)。请问您是如何复制错误消息的?它们在|
之前丢失了空格(它们都应该对齐)。我已经看到了很多,但不知道是什么原因造成的。我将终端的输出复制到visual studio代码中,选择“全部”,并在所选文本中添加一个选项卡(4个空格)。