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

时间:2024-04-16 18:31:47
一、Rust调用同级目录中的rs文件

Rust新建工程demo02,src文件夹下面新建test.rs文件,这样main.rs文件与它属于同级目录中。
在这里插入图片描述
关键点:导入test文件和test文件中的Ellipse模块

mod test;//导入test模块(文件)
use test::Ellipse;//使用test模块(文件)中的Ellipse模块

main.rs源文件

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源文件

#[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源文件

#[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源文件

#[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这个目录下有哪些模块。)

pub mod ellipse;
pub mod rectangle;

main.rs源文件

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(),
    );
}

运行结果如下图所示:
在这里插入图片描述