【问题标题】:Unable to use macros from the rsfuzzy crate无法使用 rsfuzzy crate 中的宏
【发布时间】:2016-03-26 01:59:28
【问题描述】:

我有一个项目尝试使用来自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 (  ) ; $ (

当我按照建议使用“extern crate rsfuzzy as blur”时,我得到另一个错误列表:

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>
                                        ^~~~~~~~~~~~~~~~~~~

【问题讨论】:

    标签: macros rust


    【解决方案1】:

    “rsfuzzy”板条箱表现出糟糕的编码习惯,似乎是导致此问题的原因。以下是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)
            }
        };
    }
    

    您可以看到宏将 crate 的名称硬编码fuzzy。一个写得更好的 crate 通过$crate macro variable 解决了这个问题。

    您应该向原始项目提交拉取请求或问题。同时,作为一种解决方法,您可以在导入 crate 时重命名它:

    extern crate rsfuzzy as fuzzy;
    

    【讨论】:

    • 是的,我试过了,它解决了错误,但出现了新的错误。
    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2016-07-13
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多