我收到此错误:
error: mismatched types [E0308]
process(s);
^
help: run `rustc --explain E0308` to see a detailed explanation
note: expected type `&(u32, u32, image::Luma<u8>)`
note: found type `&mut (u32, u32, &mut _)`
Run Code Online (Sandbox Code Playgroud)
但我不明白这是什么_意思。
在Rust中,_当名称无关紧要时使用标识符。在某些情况下会发生这种情况:
let _ = ...;用于忽略表达式的结果(仅在用#[must_use]属性标记该结果时才需要)_用于取消类型(或者是因为您更愿意让编译器进行推断,或者是因为编译器认为无所谓)因此,在您的情况下,编译器已忽略了该类型,因为它无关紧要,因此您可以专注于错误的具体原因。一开始它可能会让人感到困惑,但是一旦习惯了它实际上是有帮助的,特别是当类型是多毛的(非常大)时。
错误很简单:您误用了引用和值。
您的原始签名应该是:&(u32, u32, Type)但是您通过了&mut (u32, u32, &mut Type)。
可变性的差异并不重要(在此方向上),但是a &mut Type和a Type具有非常不同的存储结构,并且不能互换。
这_只是一个占位符,可以表示任何含义,并有助于澄清错误消息。
在本例中,它表示它期待一个,但实际上它找到了对某个东西image::Luma<u8>的可变引用 ( &mut) 。那东西是什么并不重要;重要的是。它永远无法与 相匹配。&mut <something>image::Luma<i>
如果相反,它说...found type &mut (u32, u32, &mut T: SomeTrait)或类似的话,我认为更难放大到眼前的问题。
您无法传递对需要复制(或移动)完整对象的函数的引用。
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |