我试图返回一个Vec<&str>
,但在while循环内部将 u64
转换为 &str
时遇到了问题:
fn latest_ids<'a>(current_id: u64, latest_id: u64) -> Vec<&'a str> {
let mut ids: Vec<&str> = vec![];
let mut start = current_id;
while !(start >= latest_id) {
start += 1;
ids.push(start.to_string().as_str());
}
ids
}
无法返回指向临时值的引用。
如果我只返回一个Vec,那么它可以正常工作。
fn latest_ids<'a>(current_id: u64, latest_id: u64) -> Vec<String> {
let mut ids: Vec<String> = vec![];
let mut start = current_id;
while !(start >= latest_id) {
start += 1;
ids.push(start.to_string());
}
ids
}
在此之后调用的下一个函数需要一个&str
类型的参数,那我是应该返回一个Vec<&str>
还是只返回一个Vec<String>
让调用者处理转换?
获取latest_ids()
结果后要调用的下一个函数:
pub fn add_queue(job: &Job, ids: Vec<&str>) -> Result<(), QueueError> {
let meta_handler = MetaService {};
match job.meta_type {
MetaType::One => meta_handler.one().add_fetch_queue(ids).execute(),
MetaType::Two => meta_handler.two().add_fetch_queue(ids).execute(),
MetaType::Three => meta_handler.three().add_fetch_queue(ids).execute(),
}
}
&str
。 - Simon Whiteheadadd_queue
内部进行处理是合适的,那么这听起来不错。 - Simon Whitehead