Rust技术问询:能否为Vector有条件初始化或完全不初始化?
Rust中条件化初始化Vector的方法
你的代码报错是因为Rust的if是表达式,必须保证所有分支返回相同类型。你原来的写法里,当b为false时,if没有返回值(默认返回单元类型()),和true分支的&str类型不兼容,所以触发E0317错误。下面是几种可行的实现方式:
方式一:用if-else直接创建不同的Vector
直接根据条件返回带元素的vec或空vec:
fn main() { let b = true; let a = if b { vec!["b"] } else { vec![] }; println!("{:?}", a); }
方式二:先创建空Vector,条件满足时添加元素
如果需要更灵活的元素添加逻辑,可以先初始化空vec,再根据条件push:
fn main() { let b = true; let mut a = vec![]; if b { a.push("b"); } println!("{:?}", a); }
方式三:用迭代器配合filter生成Vector
适合更复杂的条件筛选场景,通过迭代器的filter方法控制是否包含元素:
fn main() { let b = true; let a: Vec<&str> = std::iter::once("b").filter(|_| b).collect(); println!("{:?}", a); }
内容的提问来源于stack exchange,提问作者Fee
相关产品推荐
相关产品推荐

