You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Rust结构体字段默认值:让description回退为command值

Keymap描述回退逻辑实现

需求概述

现有Keymap结构体中description为可选字段,默认值None。要求:当未提供description时,自动使用command字段的值作为回退;若已提供description,则使用该值。

实现方案

通过给Keymap添加一个封装回退逻辑的访问方法,让调用者无需关心内部字段的可选性,直接获取最终的描述内容。同时修正原代码中main函数的语法错误(缺少闭合括号)。

修改后的完整代码如下:

#[derive(Debug, Default)]
pub struct Keymap {
    pub key: char,
    pub command: String,
    pub description: Option<String>,
    pub prompt: Option<String>,
}

impl Keymap {
    pub fn new<S: AsRef<str>>(key: char, command: S) -> Self {
        Self {
            key,
            command: command.as_ref().to_owned(),
            ..Default::default()
        }
    }

    pub fn with_prompt<S: AsRef<str>>(mut self, prompt: S) -> Self {
        self.prompt = Some(prompt.as_ref().to_owned());
        self
    }

    pub fn with_description<S: AsRef<str>>(mut self, description: S) -> Self {
        self.description = Some(description.as_ref().to_owned());
        self
    }

    // 封装回退逻辑的访问方法
    pub fn description(&self) -> &str {
        self.description.as_deref().unwrap_or(&self.command)
    }
}

fn main() {
    // 测试场景1:已提供description
    let keymap_with_desc = Keymap::new('a', "echo Hello, World!")
        .with_prompt("Enter your name:")
        .with_description("Prints 'Hello, World!'");
    
    println!("带描述的Keymap内容:{}", keymap_with_desc.description());
    println!("{:?}", keymap_with_desc);

    // 测试场景2:未提供description
    let keymap_no_desc = Keymap::new('b', "ls -la");
    println!("无描述的Keymap内容:{}", keymap_no_desc.description());
    println!("{:?}", keymap_no_desc);
}

代码说明

  • description方法:用as_deref()把Option<String>转为Option<&str>,再通过unwrap_or指定回退值为&self.command,确保description为None时自动返回command的内容。
  • 保留原结构体字段结构,通过方法封装逻辑,既不破坏原有代码结构,又满足需求。
  • 新增两个测试用例,分别验证两种场景的效果。

内容的提问来源于stack exchange,提问作者wyc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:32:33