Rust 将结构与

Rust 将结构与,rust,Rust,我正在尝试编写一个泛型函数。我有以下代码: struct Car { id: u8, wheels: u8, seatbelt: bool, } struct Motorcycle { id: u8, wheels: u8, helmet: bool, trait Vehicle {} impl Vehicle for Car {} impl Vehicle for Motorcycle {} fn vehicle_info<T>

我正在尝试编写一个泛型函数。我有以下代码:

struct Car {
    id: u8,
    wheels: u8,
    seatbelt: bool,
}

struct Motorcycle {
    id: u8,
    wheels: u8,
    helmet: bool,

trait Vehicle {}
impl Vehicle for Car {}
impl Vehicle for Motorcycle {}

fn vehicle_info<T>(vehicle: T) 
where
    T: Vehicle,
{
    println!("{} {}", vehicle.id, vehicle.wheels)
}
struct-Car{
id:u8,
车轮:u8,
安全带:bool,
}
结构摩托车{
id:u8,
车轮:u8,
头盔:布尔,
特征载体{}
impl汽车{}
摩托车用impl车辆{}
fn车辆信息(车辆:T)
哪里
T:车辆,
{
println!(“{}{}”,vehicle.id,vehicle.wheels)
}
编译器给了我
错误:T类型上没有字段id。

现在的问题是,我如何向trait中的编译器保证传递到函数中的所有结构都有这些特定字段?

在Rust中,trait不能有字段。您可以通过方法(通常称为getter)从trait访问字段:

trait车辆{
fn get_id(&self)->u8;
fn获取车轮(&self)->u8;
}
您只需返回相关字段即可实现该特征:

impl车辆用于汽车{
fn获取id(&self)->u8{
自我识别码
}
fn获取车轮(自身)->u8{
自动车轮
}
}
现在,您可以通过getter方法访问
车辆的字段

fn车辆信息(车辆:T)
哪里
T:车辆,
{
println!(“{}{}”,vehicle.id(),vehicle.wheels())
}

花时间阅读。当您声明
T:Vehicle
时,这意味着您只能通过
Vehicle
trait内声明的内容来使用
T
类型的任何数据。此处
Vehicle
为空,因此您无法对其执行任何操作。请在回答之前搜索潜在的重复数据,然后投票关闭这个问题没有回答重复的问题。啊,对不起,错过了那个问题