Rust之包,箱和模块管理(五):将模块分成不同的文件

【Rust】007-包管理与模块管理 【Rust】007-包管理与模块管理文章目录【Rust】007-包管理与模块管理一、包管理器:Cargo1、简介Cargo 官方文档仓库2、项目初始化3、写一个小程序任务目标寻找合适的库添加库到我们的项目中代码实现`cargo run`运行二、模块管理1、概述2、文件作为模块第一步:创建文件 `apple.rs`第二步:创... 阅读详情

开发环境

  • Windows 10
  • Rust 1.64.0

 

  •   VS Code 1.71.2 

项目工程

这里继续沿用上次工程rust-demo

 将模块分成不同的文件

到目前为止,本章中的所有例子都在一个文件中定义了多个模块。当模块变大时,您可能希望将它们的定义移动到一个单独的文件中,以使代码更容易导航。

例如,让我们从之前的例子中有多个餐馆模块的代码开始。我们将把模块提取到文件中,而不是把所有模块都定义在板条箱根文件中。在这种情况下,板条箱根文件是src/lib.rs,但是这个过程也适用于箱crate根文件是src/main.rs的二进制箱crate。

首先,我们将把front_of_house模块提取到它自己的文件中。删除front_of_house模块的花括号内的代码,只保留mod front _ of _ house声明,以便src/lib.rs包含之前示例所示的代码。注意,在我们下述示例中的src/front_of_house.rs文件之前,这不会被编译。

文件名:src/lib.rs

mod front_of_house;               // 保留front_of_house模块声明

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}

接下来,将花括号中的代码放到名为src/front_of_house.rs的新文件中,如下所示。编译器知道在这个文件中查找,因为它在名为front_of_house的箱crate根目录中发现了模块声明。

文件名:src/front_of_house.rs

pub mod hosting {
    pub fn add_to_waitlist() {}
}

请注意,您只需要在模块树中使用一次mod声明来加载文件。一旦编译器知道文件是项目的一部分(并且因为mod语句的位置而知道代码在模块树中的位置),项目中的其他文件就应该使用声明它的路径来引用加载的文件的代码,如之前的章节所述。换句话说,mod不是你可能在其他编程语言中见过的“包含”操作。

接下来,我们将把hosting模块提取到它自己的文件中。这个过程有点不同,因为hosting是front_of_house的子模块,而不是根模块的子模块。我们将把这个文件放在一个新的目录中,这个目录将以它在模块树中的祖先命名,在这个例子中是src/front_of_house/。

为了开始移动hosting,我们将src/front_of_house.rs更改为只包含hosting模块的声明:

文件名:src/front_of_house.rs

pub mod hosting;             // 声明hosting模块

然后,我们创建一个src/front_of_house目录和一个hosting.rs文件来包含在hosting模块中所做的定义:

文件名:src/front_of_house/hosting.rs

pub fn add_to_waitlist() {}

如果我们将hosting.rs放在src目录中,编译器会希望hosting.rs代码位于在crate root中声明的hosting模块中,而不是声明为front_of_house模块的子模块。编译器检查哪些文件有哪些模块代码的规则意味着目录和文件与模块树更加匹配。

备用文件路径

到目前为止,我们已经介绍了Rust编译器使用的最惯用的文件路径,但是Rust也支持一种更老的文件路径。对于在机箱根目录中声明的名为front_of_house的模块,编译器将在以下位置查找该模块的代码:

  • src/front_of_house.rs(我们涵盖的内容)
  • src/front_of_house/mod.rs(旧样式,仍支持路径)

对于名为hosting的模块,它是front_of_house的子模块,编译器将在以下位置查找该模块的代码:

  • src/front_of_house/hosting.rs(我们涵盖的内容)
  • src/front_of_house/hosting/mod.rs(旧样式,仍支持路径)

如果您对同一个模块使用两种风格,您将得到一个编译器错误。允许在同一个项目的不同模块中混合使用这两种风格,但是可能会让浏览您的项目的人感到困惑。

使用名为mod.rs的文件的风格的主要缺点是,您的项目最终可能会有许多名为mod.rs的文件,当您同时在编辑器中打开它们时,会感到困惑。

我们已经将每个模块的代码移动到一个单独的文件中,模块树保持不变。eat_at_restaurant中的函数调用无需任何修改即可工作,即使定义位于不同的文件中。这种技术允许您在模块变大时将它们移动到新文件中。

注意,src/lib.rs中的pub use crate::front_of_house::hosting语句也没有改变,use也没有对作为箱crate的一部分编译的文件产生任何影响。mod关键字声明模块,Rust在与该模块同名的文件中查找进入该模块的代码。

总结

Rust允许您将一个包拆分成多个箱crate,并将一个箱crate拆分成多个模块,这样您就可以从一个模块中引用另一个模块中定义的项目。您可以通过指定绝对或相对路径来实现这一点。可以用use语句将这些路径带入范围,这样就可以在该范围内多次使用该项时使用较短的路径。默认情况下,模块代码是私有的,但是可以通过添加pub关键字将定义公开。

本章重点

  • mod关键字及使用方法
  • 通过创建文件调整模块结构
  • 模块名尽量使用公有pub
  • 创建的文件名和模块名尽量一致
  • 确保代码目录结构一致
Rust调用同级目录中的rs文件和调用下级目录中的rs文件 阅读详情

相关推荐

[Rust进阶篇]-Rust之如何组织项目目录

1. 含义 Packages: Cargo提供的让我们创建, 测试和分享Crates的工具. Crates: 提供类库或可执行文件的模块树 Modules and use: 管理和组织路径, 及其作用域和访问权限 Paths: 如结构体(structs), 函数(function), 或模块(module)等事物的命名方式 2. 包与单元包关系 包(Packages)和箱(Crates) 包(Package)通过Cargo创建. 每一个包(Package)都有一个Cargo.toml文件. 包(Pac

图解AI 3180

Rust :mod.rs和lib.rs中use的作用

在上面rusttoc库中,在src目录下,除了有lib.rs文件,还有一个bar文件夹,在这个文件夹下,还有3个.rs文件,其中包括一个mod.rs文件。当然,如果一个库中,包含若干个子库,那也会存在多个不同层次的lib.rs的文件。在每层mod.rs和lib.rs文件中,要通过use来约束对外开放的程度和范围。很显然,mod.rs是把data.rs和ffi.rs综合在一起对外开放的文件。而lib.rs是在rusttoc这个层次,综合起来的一个对外开放的文件。一、mod.rs和lib.rs。

代码过客 3610

【Rust模块管理】Rust包、crate与模块管理

包:Cargo的一个功能,允许构建,测试,和分享crate。 crate:一个模块的树形结构,形成库或二进制项目。 模块:通过use来使用,用来控制作用域和路径的私有性。 路径:一个命名 例如结构体、函数或模块等项的方式 在 Rust 中,模块(module)是组织代码的基础单位,它帮助你将代码划分为多个逻辑部分,便于管理、复用和控制访问权限。 模块是一个命名空间,用于组织函数、结构体、枚举、常量、trait 和其他模块。Rust 中的模块可以嵌套,并且支持私有和公开访问控制。

景天科技苑 4万+

Rust lib.rs 有什么用,看这一篇就够了

那每一个模块和模块条目,能否被别的模块使用,我们就**需要在lib.rs**文件中进行**定义引入**,这样**才,才,才可以**使用引用的模块(文件)和模块条目(函数)

vince1998的博客 4647

【Rust指南】组织管理|路径表示|访问权限

为了方便大家学习掌握Rust 语言的语法和概念,因此我将带来一篇Rust 组织管理的内容。任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。包、箱、模块。对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。Java 组织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是function。这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。Rust 中的组织单位是模块...

叶落秋白的博客 2469

11、Rust 中的包、箱和模块详解

本文详细解析了 Rust 编程语言中的包、箱和模块系统,介绍了如何通过模块组织代码、控制作用域和隐私权限,以及使用路径引用模块中的项目。文章还通过具体示例展示了模块系统的应用场景,并总结了其优势与注意事项,帮助开发者更好地理解和运用 Rust 的模块机制。

a3b4c5的博客 99

Rust组织管理,箱Crate包Package和模块module定义和区别,use关键字作用

这里有两个 govern 函数,一个是 nation 下的,一个是 government 下的,我们用 as 将 nation 下的取别名 nation_govern。使用过 Java 的开发者在编程时往往非常讨厌最外层的 class 块——它的名字与文件名一模一样,因为它就表示文件容器,尽管它很繁琐但我们不得不写一遍来强调"这个类是文件所包含的类"。Rust 中的组织单位是模块(Module)。所有的系统库模块都是被默认导入的,所以在使用的时候只需要使用 use 关键字简化路径就可以方便的使用了。

1562

[捷稀 JCG Q30 Pro 刷机说明] 以刷入openwrt24.10为例

摘要: 本文详细介绍了捷稀JCG Q30 Pro路由器刷入OpenWrt 24.10系统的步骤。通过先刷入OpenWrt 23.05过渡固件,再升级Uboot,最后通过TFTP加载工厂镜像完成刷机。关键步骤包括解锁分区、刷写Uboot、进入恢复模式及配置网络。文章还提供了无线设置、Tailscale内网穿透等进阶命令,并附参考文档和固件下载链接。适用于有一定技术基础的玩家,需注意操作风险,严格按流程执行。

贤时间 7133

Rust之包,箱和模块管理(一):包和箱

开发环境 Windows 10 Rust 1.60.0 VS Code 1.67.2 项目工程 这里继续沿用上次工程rust-demo 基础概念 当你编写大型程序时,组织你的代码将是重要的,因为在你的头脑中保持整个程序的轨迹将变得不可能。通过对相关的功能进行分组,并将代码与不同的功能分开,您将清楚在哪里可以找到实现特定功能的代码,以及在哪里可以更改功能的工作方式。 到目前为止,我们编写的程序都在一个文件的一个模块中。随着项目的增长,您可以通过将代码分成多个模块和多个文件来组...

wing的专栏 1134

在win10系统上安装opnet14.5注意事项和步聚

opnet 14.5安装避坑!

miracle_eicont的专栏 1037

28、解码清华SSVEP基准数据集:从EEG信号到深度学习模型的实战指南

本文详细解析了清华大学SSVEP基准数据集的处理与深度学习模型构建全流程。从EEG信号预处理、数据维度变换到SSVEP分类模型设计,提供了实战代码示例和关键技巧,帮助读者掌握脑机接口领域的数据处理方法与模型优化策略。

weixin_29029995的博客 176

30天拿下Rust之箱、包和模块

Rust语言使用模块系统来组织工程和代码。模块系统允许我们将相关的函数、类型、常量等组织在一起,形成一个逻辑上的单元。通过模块系统,我们可以隐藏实现细节,只暴露必要的接口,从而提高代码的可读性和可维护性。Rust的模块系统还支持路径依赖和重导出等功能,使得代码的组织更加灵活和方便。Rust的模块系统中有三个非常重要的概念,分别是:箱(Crate)、包(Package)和模块(Module),下面逐一进行介绍。

hope_wisdom的技术博客 2123

银河麒麟服务器(ky10 server)arm、x86安装qemu虚拟机

接下来就可以新建服务器了。

zengliguang的专栏 8709

rust学习之包和模块

对于 Rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库。模块可见性不代表模块内部项的可见性,模块的可见性仅仅是允许其它模块去引用它,但是想要引用它内部的项,还得继续将对应的项标记为。使用模块,我们就能将功能相关的代码组织到一起,然后通过一个模块名称来说明这些代码为何被组织在一起。目录下,每一个文件都是独立的二进制包,同时也会包含一个库包,该包只能存在一个。Rust 出于安全的考虑,默认情况下,所有的类型都是私有化的,文件,包根文件中的三个模块分别形成了模块树的剩余部分。

2301_79967122的博客 2452

抖音无水印视频爬虫实战:从抓包分析到批量下载指定用户作品

抖音作为当前最受欢迎的短视频平台,拥有海量的优质内容。很多用户希望备份自己或他人的作品,但抖音官方并未提供批量下载功能,且直接下载的视频带有平台水印。本文将带领大家从零开始,通过抓包分析、设备模拟、请求签名等核心技术,实现一个完整的抖音无水印视频爬虫系统。本文仅供技术学习和个人备份使用,请勿将爬取的内容用于商业用途或侵犯他人版权,爬取频率请控制合理范围内。目录一、前言二、技术栈概览三、准备工作3.1 环境搭建3.2 抓包分析步骤3.3 关键API发现四、核心技术解密4.1 X-Gorgon签名算法。

2201_76125261的博客 846

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

通过包和模块来组织Rust项目

Rust是一种现代的系统编程语言,具有高效性、安全性和并发性等特点。它的构建系统和包管理系统通过Cargo工具提供支持,帮助开发者管理项目、工作空间、包和模块。下面详细介绍Rust中的相关概念及其用法。

yang1fei2的博客 1623

模型实战(16)之StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

yohnyang的博客 1770

Rust编程-包、模块、单元包

1. 包可以类比前端工程2. 单元包分为二进制单元包和库单元包。二进制单元包就是开发当前业务系统;库单元包是为了开发组件库(类比npm组件)。1. 模块的作用主要是功能相关的代码分组到一起2. 条目是模块的组成部分,包含变量、结构体、枚举、子节点等3. 路径是访问条目的路径。是条目在模块树的节点的路径。文章引字《Rust权威指南》一书。通过整理让概念和知识点更加条理清晰。本章都是概念知识很简单,但是需要把知识点梳理清楚。

Mercuryyjs的博客 1554

YOLOv13改进:注意力机制 | 动态稀疏注意力的双层路由方法BiLevelRoutingAttention | CVPR2023

BiLevelRoutingAttention方法对小目标检测效果比较好。可能是因为BRA模块是基于稀疏采样而不是下采样,一来可以保留细粒度的细节信息,二来同样可以达到节省计算量的目的。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1435

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Rust包、crate与模块管理

Rust的包、crate和模块管理机制提供了一种强大而灵活的方式来组织和管理代码。通过Cargo工具,开发者可以轻松地处理依赖关系、编译代码和发布包。理解这些概念对于有效地编写和维护Rust项目至关重要。

owolai的博客 1436

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

趣味学RUST基础篇(管理包和模块)

概念类比作用mod建房间划分代码区域路径门牌号定位某个函数或结构体pub开门按钮决定是否对外开放use快捷方式简化对常用项的调用模块树大楼平面图展示所有模块的层级关系。

编码浪子的专栏 951

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Rust 组织管理

任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习 Rust 语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。Rust 中有三个重要的组织概念:箱、包、模块。

m0_65541699的博客 1875

Rust之包,箱和模块管理(四):用use关键字引用其他包

Rust之包,箱和模块管理(四):用use关键字引用其他包

wing的专栏 4045

【Rust】Rust学习 第七章使用包、Crate和模块管理不断增长的项目

模块让我们可以将一个 crate 中的代码进行分组,以提高可读性与重用性。模块还可以控制项的私有性,即项是可以被外部代码使用的(public),还是作为一个内部实现的内容,不能被外部代码使用(private案例:在餐饮业,餐馆中会有一些地方被称之为前台),还有另外一些地方被称之为后台前台是招待顾客的地方,在这里,店主可以为顾客安排座位,服务员接受顾客下单和付款,调酒师会制作饮品。后台则是由厨师工作的厨房,洗碗工的工作地点,以及经理做行政工作的地方组成。

StudyWinter的博客 2354
上一篇: Rust之包,箱和模块管理(四):用use关键字引用其他包
下一篇: Rust之常用集合(一):向量(vector)
枫★曦
博客等级 码龄19年 251粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值