Rust调用同级目录中的rs文件和调用下级目录中的rs文件

一、Rust调用同级目录中的rs文件

Rust新建工程demo02,src文件夹下面新建test.rs文件,这样main.rs文件与它属于同级目录中。

关键点:导入test文件和test文件中的Ellipse模块

rust 复制代码
mod test;//导入test模块(文件)
use test::Ellipse;//使用test模块(文件)中的Ellipse模块

main.rs源文件

rust 复制代码
mod test;//导入test模块(文件)
use test::Ellipse;//使用test模块(文件)中的Ellipse模块


fn main() {
    let mut ell=Ellipse::new();
    
    ell.set(10, 5);

    println!("{:#?}", ell);

    println!(
        "椭圆的长半轴={},椭圆的短半轴={},椭圆的面积={}",
        ell.get_x(),
        ell.get_y(),
        ell.area(),
    );
}

test.rs源文件

rust 复制代码
#[derive(Debug)]
//定义一个结构体
pub struct Ellipse {
    max_semi_axis: u32,
    min_semi_axis: u32,
}

impl Ellipse {
    //创建Ellipse对象
    pub fn new() -> Ellipse {
        Ellipse {
            max_semi_axis: 0,
            min_semi_axis: 0,
        }
    }

    //设置Ellipse其中元素值
    pub fn set(&mut self, max_x: u32, min_y: u32){
        self.max_semi_axis=max_x;
        self.min_semi_axis=min_y;
    }

    //获取Ellipse长半轴值
    pub fn get_x(&mut self) -> u32 {
        self.max_semi_axis
    }
    //获取Ellipse短半轴值
    pub fn get_y(&mut self) -> u32 {
        self.min_semi_axis
    }

    //计算椭圆的面积
    pub fn area(&mut self) -> f64 {
        3.14 * self.max_semi_axis as f64 * self.min_semi_axis as f64
    }
}

运行结果如下图所示:

二、Rust调用下级目录中的rs文件

Rust新建工程demo03,src文件夹下面新建shape目录,再在shape目录下新建ellipse.rs文件、rectangle.rs文件和mod.rs文件。

关键点:因为main.rs文件需要调用shape目录下的ellipse.rs文件、rectangle.rs文件,所以这是需要在shape目录下建立一个 mod.rs (Rust中的一个特殊文件) 用于模块的声明,就相当于声明shape这个目录下有哪些模块。

ellipse.rs源文件

rust 复制代码
#[derive(Debug)]
//定义一个椭圆结构体
pub struct Ellipse {
    max_semi_axis: u32,
    min_semi_axis: u32,
}

impl Ellipse {
    //创建Ellipse对象
    pub fn new() -> Ellipse {
        Ellipse {
            max_semi_axis: 0,
            min_semi_axis: 0,
        }
    }

    //设置Ellipse其中元素值
    pub fn set(&mut self, max_x: u32, min_y: u32){
        self.max_semi_axis=max_x;
        self.min_semi_axis=min_y;
    }

    //获取Ellipse长半轴值
    pub fn get_x(&mut self) -> u32 {
        self.max_semi_axis
    }
    //获取Ellipse短半轴值
    pub fn get_y(&mut self) -> u32 {
        self.min_semi_axis
    }

    //计算椭圆的面积
    pub fn area(&mut self) -> f64 {
        3.14 * self.max_semi_axis as f64 * self.min_semi_axis as f64
    }
}

rectangle.rs源文件

rust 复制代码
#[derive(Debug)]
//定义一个长方形结构体
pub struct Rectangle {
    a: u32,
    b: u32,
}

impl Rectangle {
    //创建Rectangle对象
    pub fn new() -> Rectangle {
        Rectangle {
            a: 0,
            b: 0,
        }
    }

    //设置Rectangle其中元素值
    pub fn set(&mut self, a: u32, b: u32){
        self.a=a;
        self.b=b;
    }

    //获取Rectangle边长a
    pub fn get_a(&mut self) -> u32 {
        self.a
    }
    //获取Rectangle边长b
    pub fn get_b(&mut self) -> u32 {
        self.b
    }

    //计算长方形的面积
    pub fn area(&mut self) -> u32 {
        self.a * self.b
    }
}

mod.rs源文件(声明shape这个目录下有哪些模块。)

rust 复制代码
pub mod ellipse;
pub mod rectangle;

main.rs源文件

rust 复制代码
mod shape;//导入shape文件夹
use shape::ellipse::Ellipse;//使用shape文件夹下的ellipse文件中的Ellipse模块
use shape::rectangle::Rectangle;//使用shape文件夹下的rectangle文件中的Rectangle模块


fn main() {
    let mut ell=Ellipse::new();
    
    ell.set(10, 5);

    println!("{:#?}", ell);

    println!(
        "椭圆的长半轴={},椭圆的短半轴={},椭圆的面积={}",
        ell.get_x(),
        ell.get_y(),
        ell.area(),
    );

    println!("-------------------------------------------------------");

    let mut rect=Rectangle::new();
    
    rect.set(8, 3);

    println!("{:#?}", rect);

    println!(
        "长方形的边长a={},长方形的边长b={},长方形的面积={}",
        rect.get_a(),
        rect.get_b(),
        rect.area(),
    );
}

运行结果如下图所示:


相关推荐
qq_49244844628 分钟前
Jmeter设置负载阶梯式压测场景(详解教程)
开发语言·python·jmeter
ID_180079054731 小时前
京东获取整站实时商品详情数据|商品标题|数据分析提取教程
java·开发语言
qiuiuiu4132 小时前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
molong9312 小时前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin
盼哥PyAI实验室2 小时前
踏上编程征程,与 Python 共舞
开发语言·python
阿无,3 小时前
Java设计模式之工厂模式
java·开发语言·设计模式
weixin_307779133 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json
ss2733 小时前
手写MyBatis第104弹:SqlSession从工厂构建到执行器选择的深度剖析
java·开发语言·后端·mybatis
周杰伦_Jay4 小时前
【Java集合体系】全面解析:架构、原理与实战选型
java·开发语言·数据结构·链表·架构
Camel卡蒙4 小时前
DDD架构——实体、聚合、值对象
java·开发语言·架构