MST

星途 面试题库

面试题:Rust中结构体如何处理内部成员可能产生的错误

假设你定义了一个Rust结构体 `User`,其中有一个 `email` 字段,在设置 `email` 时需要验证格式是否正确,如果格式不正确返回错误。请写出这个结构体定义以及设置 `email` 的方法,并处理可能产生的错误。
40.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fmt;

// 自定义错误类型
#[derive(Debug)]
struct EmailFormatError;

impl fmt::Display for EmailFormatError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "Email格式不正确")
    }
}

// 定义User结构体
struct User {
    email: String,
}

impl User {
    // 设置email的方法
    fn set_email(&mut self, new_email: &str) -> Result<(), EmailFormatError> {
        if is_valid_email(new_email) {
            self.email = new_email.to_string();
            Ok(())
        } else {
            Err(EmailFormatError)
        }
    }
}

// 简单的邮箱格式验证函数
fn is_valid_email(email: &str) -> bool {
    email.contains('@') && email.contains('.')
}

在上述代码中:

  1. 定义了一个自定义错误类型 EmailFormatError,实现了 DebugDisplay 特征。
  2. 定义了 User 结构体,包含 email 字段。
  3. User 结构体上实现了 set_email 方法,该方法接收一个字符串切片,验证邮箱格式后设置 email 字段,若格式不正确返回错误。
  4. 提供了一个简单的 is_valid_email 函数用于验证邮箱格式(实际应用中可以使用更完善的正则表达式等方式验证)。