MST

星途 面试题库

面试题:Rust的format!宏在复杂数据结构输出中的应用

假设有一个自定义结构体,其中包含多个不同类型的字段,例如整数、字符串切片和枚举类型。请使用format!宏实现将该结构体实例的相关信息以易读的格式输出到控制台,要求合理利用格式化选项,并且考虑如何处理枚举类型的输出。
21.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 假设枚举类型
enum MyEnum {
    Variant1,
    Variant2,
}

// 自定义结构体
struct MyStruct {
    num: i32,
    str_slice: Vec<String>,
    my_enum: MyEnum,
}

fn main() {
    let my_struct = MyStruct {
        num: 42,
        str_slice: vec!["hello".to_string(), "world".to_string()],
        my_enum: MyEnum::Variant1,
    };

    let output = format!(
        "MyStruct: num = {}, str_slice = {:?}, my_enum = {}",
        my_struct.num,
        my_struct.str_slice,
        match my_struct.my_enum {
            MyEnum::Variant1 => "Variant1",
            MyEnum::Variant2 => "Variant2",
        }
    );

    println!("{}", output);
}
  1. 定义枚举类型和结构体:首先定义了一个枚举类型MyEnum和一个包含整数、字符串切片和枚举类型的结构体MyStruct
  2. 实例化结构体:在main函数中创建了MyStruct的实例。
  3. 使用format!:在format!宏中,使用{}占位符来指定输出格式。对于整数num直接输出,对于字符串切片str_slice使用{:?}以调试格式输出(可以清晰展示内容),对于枚举类型my_enum,通过match语句将其转换为易读的字符串输出。最后使用println!将格式化后的字符串输出到控制台。

若使用其他编程语言,思路类似,但语法会有所不同,例如在Go语言中:

package main

import (
    "fmt"
)

// 定义枚举类型(Go中没有枚举关键字,用常量模拟)
type MyEnum int
const (
    Variant1 MyEnum = iota
    Variant2
)

// 定义结构体
type MyStruct struct {
    num      int
    strSlice []string
    myEnum   MyEnum
}

func main() {
    myStruct := MyStruct{
        num:      42,
        strSlice: []string{"hello", "world"},
        myEnum:   Variant1,
    }

    var enumStr string
    switch myStruct.myEnum {
    case Variant1:
        enumStr = "Variant1"
    case Variant2:
        enumStr = "Variant2"
    }

    output := fmt.Sprintf("MyStruct: num = %d, strSlice = %v, myEnum = %s", myStruct.num, myStruct.strSlice, enumStr)
    fmt.Println(output)
}
  1. 定义枚举类型和结构体:在Go语言中通过常量模拟枚举类型MyEnum,并定义了包含相应字段的结构体MyStruct
  2. 实例化结构体:在main函数中创建MyStruct实例。
  3. 使用fmt.Sprintffmt.Sprintf类似Rust中的format!宏,通过格式化字符串和switch语句处理枚举类型,将结构体信息格式化为易读的字符串并输出到控制台。