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

运行结果如下图所示:


相关推荐
hsg7717 分钟前
简述:Rust、GeoRust、自主研发GIS平台
开发语言·后端·rust
承渊政道28 分钟前
飞算Java炫技赛:Java×Unity数字孪生园区平台的从零落地记录
java·开发语言·unity·技术分享·vibe coding·飞算javaai·飞算java ai炫技赛
wdfk_prog6 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
许彰午10 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系10 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜10 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
AOwhisky10 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
chouchuang12 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空13 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen13 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang