比如下面代码中,tags
设置默认值的操作有没有简单的方法?
现在这样如果struct
嵌套层级多一些,那代码肯定写的很繁琐,看起来不够直观。
请大佬们指点一下🙏
struct Data {
tags: Option<Vec<i32>>,
...
}
fn handle_data(data: Option<Data>) {
// 这里我想给tags设置个空的Vec作为默认值
let tags = data
.map_or(vec![], |d| d.tags.unwrap_or_else(vec![]));
}
1
共 3 条评论, 1 页
评论区
写评论总觉得两层Option有点过于多余了
难道对tag来说,vec![]跟None的含义不同吗?
如果没有不同的话,直接把tag写成Vec就好,没必要再套一层Option的
大佬,帮我看
data
为None
时,我的理解对不对。如果
data
参数是None
,那其实就相当于是let tags = None.unwrap_or_default();
了吧。这个时候能生成正确的空Vec
是因为编译器根据代码中|d| d.tags
的返回值类型推导出要应用的默认值类型是Vec<i32>
。--
👇
songzhi: ```rust fn handle_data(data: Option) { // 这里我想给tags设置个空的Vec作为默认值 let tags = data.and_then(|d| d.tags).unwrap_or_default(); }