TODO Rust 生命周期 所有权
关于生命周期 所有权等概念在实际项目中的应用
范围:QueryExecutor 相关的生命周期,所有权问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pub fn query_sentence_bitmap(
index_path: &str,
column_name: &str,
sentence: &str,
) -> Result<Vec<u8>, TantivySearchError> {
static FUNC_NAME: &str = "query_sentence_bitmap";
let bridge = CKSearchUtils::get_index_reader_bridge(FUNC_NAME, index_path)?;
let strategy: SentenceQueryStrategy<'_> = SentenceQueryStrategy {column_name, sentence};
let executor: QueryExecutor<'_, Arc<RoaringBitmap>> = QueryExecutor::new(&strategy);
let bitmap = CKSearchUtils::execute_query(FUNC_NAME, executor, &bridge.reader.searcher())?;
println!("{:?}", executor.execute(&bridge.reader.searcher()));
Ok(ConvertUtils::row_ids_to_u8_bitmap(&bitmap.iter().collect()))
}
所有权:每个值只能有一个所有者,当所有者离开作用域时,值被释放。 借用:通过 & 符号实现,可以是不可变借用 &T 或可变借用 &mut T。 按值传递:结构体的所有权会移动,但内部的引用保持对原始数据的引用。 你的代码:QueryExecutor 按值传递,但其内部引用的生命周期仍然有效,因此可以在函数调用后继续使用。
本文由作者按照 CC BY 4.0 进行授权