无法使用来自rsfuzzy箱子的宏

时间:2016-03-26 01:59:28

标签: macros rust

我有一个项目尝试使用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>
                                        ^~~~~~~~~~~~~~~~~~~

1 个答案:

答案 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;