MST

星途 面试题库

面试题:Rust复杂生命周期场景下的泛型与生命周期结合

设计一个泛型函数`process_data`,它接受两个不同类型的结构体`StructA`和`StructB`,这两个结构体内部都有不同生命周期标注的引用成员。函数需要对这些引用进行操作,同时要保证生命周期的正确性。请详细说明如何设计这个函数以及如何正确标注生命周期参数,并且给出完整的代码实现。
23.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义结构体 StructA
struct StructA<'a> {
    data: &'a i32,
}

// 定义结构体 StructB
struct StructB<'b> {
    data: &'b String,
}

// 泛型函数 process_data,正确标注生命周期参数
fn process_data<'a, 'b>(a: StructA<'a>, b: StructB<'b>) {
    println!("StructA data: {}", a.data);
    println!("StructB data: {}", b.data);
}

fn main() {
    let num = 42;
    let str_val = String::from("Hello, Rust");

    let struct_a = StructA { data: &num };
    let struct_b = StructB { data: &str_val };

    process_data(struct_a, struct_b);
}
  1. 结构体定义
    • StructAStructB 分别定义了不同类型的引用成员,并且使用了不同的生命周期参数 'a'b
  2. 泛型函数设计
    • process_data 函数接受 StructA<'a>StructB<'b> 类型的参数,函数内部只是简单地打印结构体中的数据,展示如何对不同生命周期引用进行操作。
    • 在函数签名中明确声明了两个生命周期参数 'a'b,这使得函数可以接受具有不同生命周期的结构体实例。
  3. 代码实现
    • main 函数中,创建了 StructAStructB 的实例,并调用 process_data 函数传递这些实例。由于生命周期标注正确,代码可以顺利编译和运行。