我将类型定义为大小固定的数组,并尝试为其实现一些自定义方法。
type Vec3 = [f64; 3];
impl Vec3 {
fn display(&self) {
println!("x = {}, y = {}, z = {}", self[0], self[1], self[2]);
}
}
我收到此错误:
error[E0118]: no base type found for inherent implementation
--> src/main.rs:7:6
|
7 | impl Vec3 {
| ^^^^ impl requires a base type
|
= note: either implement a trait on it or create a newtype to wrap it instead
error: aborting due to previous error
此错误的本质是什么,我该如何修复我的代码?
答案 0 :(得分:2)
您的专线
type Vec3 = [f64; 3];
并没有真正声明一个新类型,它只是为数组Vec3
声明了一个名为[f64; 3]
的{{3}}。
当我们运行rustc --explain E0118
时,Rust编译器会帮助我们对其进行描述:
You're trying to write an inherent implementation for something which isn't a
struct nor an enum.
因此,您只能将impl
用于struct
或enum
。您的情况的快速解决方案是将Vec3
声明为type alias:
struct Vec3([f64; 3]);
但是那意味着要重写您的display
方法。为了清楚起见,我们将分解为局部变量:
let Self(vec) = self;
println!("x = {}, y = {}, z = {}", vec[0], vec[1], vec[2]);
您可以在tuple Struct上看到一个有效的示例。