Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multidimensional array 如何在&;之间进行减法运算;ndarray::阵列1<;f64>;及;mut阵列1<;f64>;?_Multidimensional Array_Rust_Rust Crates - Fatal编程技术网

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”未实现trait
ndarray::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”未实现trait
ndarray::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个空格)。