我有一个项目尝试使用rsfuzzy中的宏:
#[macro_use]
extern crate rsfuzzy;
fn main() {
fz_input_var!();
}
当我编译时,我得到的错误如下:
<rsfuzzy macros>:3:22: 3:41 error: failed to resolve. Use of undeclared type or module `fuzzy::mf` [E0433]
<rsfuzzy macros>:3 let mut vars : Vec < fuzzy:: mf:: MfType > = Vec:: new ( ) ; $ (
当我使用外部板条模糊的模糊&#39;随着时间的推移,我得到另一个错误列表:
failed to resolve. Use of undeclared type or module `TXParserError` [E0433]at line 9 col 1 in <rsfuzzy macros>
unresolved name `TXParserError::from_complex` [E0425]at line 9 col 1 in <rsfuzzy macros>
^~~~~~~~~~~~~~~~~~~
答案 0 :(得分:1)
“模糊”的箱子表现出不良的编码习惯,这似乎导致了这个问题。以下是the first macro I found的示例:
#[macro_export]
macro_rules! fz_input_var {
( $( $x:expr ),* ) => {
{
let mut vars: Vec<fuzzy::mf::MfType> = Vec::new();
$(
let value = match $x.0 {
"triangle" => fuzzy::mf::Triangle::new($x.1, $x.2),
"trapezoid" => fuzzy::mf::Trapezoid::new($x.1, $x.2),
"up" => fuzzy::mf::Up::new($x.1, $x.2),
"down" => fuzzy::mf::Down::new($x.1, $x.2),
_ => return Err(TXParserError::from_complex("No MF found for type", $x.0))
};
vars.push(value);
)*
fuzzy::InputVar::new(vars)
}
};
}
您可以看到宏硬编码包的名称为fuzzy
。写得更好的箱子通过$crate
macro variable来解决这个问题。
您应该向原始项目提交拉取请求或问题。同时作为解决方法,您可以在导入时重命名包:
extern crate rsfuzzy as fuzzy;