首页 > 解决方案 > 如何在 Rust 模块/库中创建变量?

问题描述

为了在 Rust 中练习 crates,我决定创建一个包含不同种类蜗牛信息的库,但存在一个问题:我无法使用 let 关键字创建变量。我应该将变量放入某个函数中,还是有什么方法可以在函数外创建变量?或者我应该创建返回有关某些物种而不是变量的信息的函数(例如。也不是 fulica,而是 fulica())。我不喜欢让物种发挥作用的想法,因为 Snails::species::Achatina::fulica 似乎比 Snails::species::Achatina::fulica() 更方便

mod species{
pub struct Animal {
    Superorder: String, Order: String, Suborder:String,Superfamily:String,Family:String,Genus:String,Specie:String
}
pub struct SnailInfo{
    size:(i32,i32), general_info:String,inhabitation:String, full_name: String, zoological:Animal
}
mod Achatina{
    let fulica = SnailInfo{
        size:(12,20),general_info: "Also wnown as giant african land snail, Achatina Fulica is one of the most invasive animals in the world. It originates from the Eastern Africa, but you can find them in the Asia, North America, South America and Australia",
        inhabitation: "Africa, Asia, North America, South America, Australia and some islands", full_name: "Lissachatina fulica",zoological:{Suprorder:Eupelmonata,Order:"Stylomatophora",Suborder:"Achatina",
    Superfamily:"Achatinoidae",Family:"Achatinoidae",Genus:"Lissachatina",Specie:"Lissachatina Fulica"}
    }
    let reticulata = SnailInfo{
        size:(15,25), general_info:"Eatern African snail known for its fast speed of growing and the black head.",inhabitation:"Mostly Zanzibar",full_name:"Achatina Reticulata",
    }
}

错误:| 9 | 让 fulica = SnailInfo{ | ^^^ 预期项目

PS我不明白,这段代码中还有很多其他错误,但我会自己改进它们

标签: variablesrustmodule

解决方案


如果将所有这些Strings 转换为&'static strs,则可以将蜗牛声明为statics:

mod species {
    pub struct Animal {
        Superorder: &'static str,
        Order: &'static str,
        Suborder: &'static str,
        Superfamily: &'static str,
        Family: &'static str,
        Genus: &'static str,
        Species: &'static str,
    }

    pub struct SnailInfo {
        size: (i32, i32),
        general_info: &'static str,
        inhabitation: &'static str,
        full_name: &'static str,
        zoological: Animal,
    }

    mod Achatina {
        // Note that you have to import the types from the containing module.
        use super::{Animal, SnailInfo};

        static FULICA: SnailInfo = SnailInfo{
            size: (12,20),
            general_info: "Also wnown as giant african land snail, Achatina Fulica is one of the most invasive animals in the world. It originates from the Eastern Africa, but you can find them in the Asia, North America, South America and Australia",
            inhabitation: "Africa, Asia, North America, South America, Australia and some islands",
            full_name: "Lissachatina fulica",
            zoological: Animal {
                Superorder: "Eupelmonata",
                Order: "Stylomatophora",
                Suborder: "Achatina",
                Superfamily: "Achatinoidae",
                Family: "Achatinoidae",
                Genus: "Lissachatina",
                Species: "Lissachatina Fulica",
            }
        };
    }
}

我强烈建议您查看rust book


推荐阅读