无法取消引用类型 `usize`
Type `usize` cannot be dereferenced
我有一些代码看起来有点像下面这样:
let incoming: Vec<u8> = Vec::new();
match some_function(|data| {
let temp = &mut incoming;
Ok(*temp.write(data).unwrap())
}) {
Ok(v) => v,
Err(err) => return false,
};
现在我得到的错误如下:
error: type `usize` cannot be dereferenced
--> src/stripe_connection.rs:127:16
|
127 | Ok(*temp.write(data).unwrap())
出于某种原因,我无法理解我做错了什么,因为 borrowing/lifecycle 对我来说仍然很陌生。
usize
doesn't implement the Deref
特征,所以你不能对它应用 *
。 write()
returns a Result<usize>
,所以当你 unwrap()
它并应用取消引用星号时:
*temp.write(data).unwrap()
您正在尝试
*usize
这是不可能的。
我认为您可能弄错了运算符优先级。
*temp.write(data).unwrap()
等同于 *(temp.write(data).unwrap())
,而不是 (*temp).write(data).unwrap()
。您可以编写后者,但这是不必要的,因为编译器会自动取消引用方法调用主题中的指针(即 x.f(..)
中的 x
)。所以你应该在这里完全删除 *
。
我有一些代码看起来有点像下面这样:
let incoming: Vec<u8> = Vec::new();
match some_function(|data| {
let temp = &mut incoming;
Ok(*temp.write(data).unwrap())
}) {
Ok(v) => v,
Err(err) => return false,
};
现在我得到的错误如下:
error: type `usize` cannot be dereferenced
--> src/stripe_connection.rs:127:16
|
127 | Ok(*temp.write(data).unwrap())
出于某种原因,我无法理解我做错了什么,因为 borrowing/lifecycle 对我来说仍然很陌生。
usize
doesn't implement the Deref
特征,所以你不能对它应用 *
。 write()
returns a Result<usize>
,所以当你 unwrap()
它并应用取消引用星号时:
*temp.write(data).unwrap()
您正在尝试
*usize
这是不可能的。
我认为您可能弄错了运算符优先级。
*temp.write(data).unwrap()
等同于 *(temp.write(data).unwrap())
,而不是 (*temp).write(data).unwrap()
。您可以编写后者,但这是不必要的,因为编译器会自动取消引用方法调用主题中的指针(即 x.f(..)
中的 x
)。所以你应该在这里完全删除 *
。