Rust中match语句的写法及长if/else if语句的改写方法
Rust中match语句介绍及代码改写示例
提问内容
我是Rust和GTK新手,编写了一个包含长if/else if分支的函数,代码如下:
fn clicking_buttons(&mut self, button_name: String) { if button_name.eq("button_one") { self.on_btn_one(); } else if button_name.eq("button two") { self.on_btn_two(); } else if button_name.eq("button three") { self.on_btn_three(); } else if button_name.eq("button four") { self.on_btn_four(); } else if button_name.eq("button five") { self.on_btn_five(); } }
请问Rust中的match语句是什么样的?如何将上述函数用match语句改写?
什么是Rust的match语句
match是Rust核心的模式匹配语法,用来替代冗长的if/else if链,优势在于可读性更强,且编译器会强制检查是否覆盖了所有可能的匹配情况(除非你用_通配符兜底)。
基本结构如下:
match 目标值 { 模式1 => 执行逻辑1, 模式2 => 执行逻辑2, // 更多匹配分支 _ => 默认逻辑, // 可选,匹配所有未被上面覆盖的情况 }
每个分支的模式和执行逻辑用=>分隔,多个分支用逗号区分;如果执行逻辑是多行代码,可以用大括号{}包裹。
改写按钮处理函数
针对你的按钮处理函数,我们可以直接对button_name进行match匹配。这里推荐用as_str()把String转成&str,匹配字符串字面量更高效:
fn clicking_buttons(&mut self, button_name: String) { match button_name.as_str() { "button_one" => self.on_btn_one(), "button two" => self.on_btn_two(), "button three" => self.on_btn_three(), "button four" => self.on_btn_four(), "button five" => self.on_btn_five(), _ => {} // 可选分支:处理未匹配到的按钮名称,此处留空表示不执行任何操作 } }
如果需要对未知按钮名称做提示,可以修改默认分支:
_ => eprintln!("未识别的按钮:{}", button_name),
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

