Rust函数中实现可变长度文本等长星号替换的方案咨询
解决Rust密码模式下等长星号替换的问题
核心思路
受框架限制必须返回&str集合,且不能修改原String数组,同时要规避静态字符串的长度限制,关键是要让生成的星号字符串生命周期覆盖返回的&str。可以用**函数内局部的Vec<String>**存储每个密码对应的星号串,再从中提取&str返回——只要这个Vec的生命周期与返回的&str集合绑定,就能通过编译器的生命周期检查。
具体实现代码
fn format_for_tui(input: &[String], password_mode: bool) -> Vec<&str> { if !password_mode { return input.iter().map(|s| s.as_str()).collect(); } // 局部Vec存储生成的星号串,确保生命周期覆盖返回的&str let masked_strings: Vec<String> = input .iter() .map(|s| "*".repeat(s.len())) .collect(); // 从Vec中提取&str,引用生命周期与masked_strings一致 masked_strings.iter().map(|s| s.as_str()).collect() }
关于Rc尝试失败的原因
用Rc<String>生成星号串后,若未在函数内持有Rc的集合,编译器无法保证&str的有效性。而上述方案通过局部Vec<String>直接持有所有星号串,引用生命周期清晰,能被编译器确认安全性。
注意事项
- 完全不修改原
input数组,符合需求; - 返回的
Vec<&str>生命周期与输入input、局部masked_strings绑定,TUI组件展示场景通常满足使用周期覆盖的要求。
内容的提问来源于stack exchange,提问作者pm100
相关产品推荐
相关产品推荐

