我正在尝试使用模糊搜索包来构建一个选择数据结构,以便可以一次使用一个字符串进行高效查询。我已成功创建结构:
use fuzzy_search::{distance::levenshtein, symspell::SymSpell};
let mut matcher = SymSpell::new(levenshtein, 2);
for ns in all_name_strings {
matcher.insert(ns);
}
现在我想将此变量传递给另一个函数来执行实际查询,但我不知道在定义中使用哪种类型。我在这里使用单位类型快捷方式简化了这个问题。我得到的最接近的答案是:
let (): SymSpell<fn(&str, &str) -> usize> = matcher;
但这仍然失败:
4 error[E0308]: mismatched types
--> rust/shp_sanity/src/ed_builder.rs:278:53
|
278 | let (): SymSpell<fn(&str, &str) -> usize> = matcher;
| --------------------------------- ^^^^^^^ expected `SymSpell<fn(&str, &str) -> usize>`, found `SymSpell<fn(..., ...) -> ... {levenshtein}>`
| |
| expected due to this
|
= note: expected struct `SymSpell<for<'a, 'b> fn(&'a _, &'b _) -> _>`
found struct `SymSpell<for<'a, 'b> fn(&'a _, &'b _) -> _ {levenshtein}>`
我尝试过放在{levenshtein}
末尾,但不幸的是,这也出错了。我最初以为我只需要传递函数,例如SymSpell<levenshtein>
,但结果失败了:
1 error[E0747]: constant provided when a type was expected
--> rust/shp_sanity/src/ed_builder.rs:279:26
|
279 | let (): SymSpell<levenshtein> = matcher;
| ^^^^^^^^^^^
|
= help: `levenshtein` is a function item, not a type
= help: function item types cannot be named directly
理想情况下,这个板条箱会导出一个我可以使用的类型,但在这种情况下我没有看到。
我如何才能找出在我的函数中声明的正确类型?