Ваша строка
type Vec3 = [f64; 3];
на самом деле не объявляет новый тип, она просто объявляет псевдоним типа с именем Vec3
для массива [f64; 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
структурой кортежа :
struct Vec3([f64; 3]);
Но тогда это означает несколько переписать ваш метод display
. Для ясности мы деструктурируем до локальной переменной:
let Self(vec) = self;
println!("x = {}, y = {}, z = {}", vec[0], vec[1], vec[2]);
Рабочий пример можно увидеть на игровой площадке (43122f5fdbd157b9925a5fd2f660c329) .