Rust基本语法

Rust基本语法

Hello World

fn main() {println!("Hello, world!");
}

Rust数据类型

Rust 是一种静态类型的语言。 Rust 中的每个值都是某种数据类型。 编译器可以根据分配给它的值自动推断变量的数据类型。

声明变量

使用关键词 let 声明变量。

直接赋值的场合Rust会自动的推断变量类型,在ide可以很方便的查看

Image1

fn main() {let company_string = "TutorialsPoint";  // string 类型let rating_float = 4.5;                 // float 类型let is_growing_boolean = true;          // boolean 类型let icon_char = '♥';                    //unicode character 类型println!("company name is:{}",company_string);println!("company rating on 5 is:{}",rating_float);println!("company is growing :{}",is_growing_boolean);println!("company icon is:{}",icon_char);
}
在上面的代码示例中,变量的数据类型是从被分配的值而推断出来的。例如,变量 company_string 被 Rust 分配了 string 字符串数据类型,变量 rating_float 被分配了 float 浮点数据类型,等等。

println! 宏函数有两个参数

一个参数是占位符 { },特别的语法
一个参数是变量或者常量
占位符将被变量的值替换掉

上述代码片段将输出以下内容

company name is: TutorialsPoint
company rating on 5 is:4.5
company is growing: true
company icon is: ♥

需要注意的是Rust的变量默认为不可变变量

Rust为了糕饼发进行设计,他的变量使用let关键词声明时是默认不可边的

比方说:

let a = 123;

而接下来的三句

a = "abc";
a = 4.56; 
a = 456;

都会报错,so why?

第一行的错误在于当声明 a 是 123 以后,a 就被确定为整型数字,不能把字符串类型的值赋给它。

第二行的错误在于自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换。

第三行的错误在于 a 不是个可变变量。

前两种错误很容易理解,但第三个是什么意思?难道 a 不是个变量吗?

这就牵扯到了 Rust 语言为了高并发安全而做的设计:在语言层面尽量少的让变量的值可以改变。所以 a 的值不可变。但这不意味着 a 不是"变量"(英文中的 variable),官方文档称 a 这种变量为"不可变变量"。

如果我们编写的程序的一部分在假设值永远不会改变的情况下运行,而我们代码的另一部分在改变该值,那么代码的第一部分可能就不会按照设计的意图去运转。由于这种原因造成的错误很难在事后找到。这是 Rust 语言设计这种机制的原因。

当然,使变量变得"可变"(mutable)只需一个 mut 关键字。

let mut a = 123;
a = 456;

这样程序就可以运行了

常量与不可变变量的区别

既然不可变变量是不可变的,那不就是常量吗?为什么叫变量?

变量和常量还是有区别的。在 Rust 中,以下程序是合法的:

let a = 123; // 可以编译,但可能有警告,因为该变量没有被使用
let a = 456;

但是如果 a 是常量就不合法:

const a: i32 = 123;
let a = 456;

变量的值可以"重新绑定",但在"重新绑定"以前不能私自被改变,这样可以确保在每一次"绑定"之后的区域里编译器可以充分的推理程序逻辑。 虽然 Rust 有自动判断类型的功能,但有些情况下声明类型更加方便:

let a: u64 = 123;

这里声明了 a 为无符号 64 位整型变量,如果没有声明类型,a 将自动被判断为有符号 32 位整型变量,这对于 a 的取值范围有很大的影响。

重影(Shadowing)

重影的概念与其他面向对象语言里的"重写"(Override)或"重载"(Overload)是不一样的。重影就是刚才讲述的所谓"重新绑定",之所以加引号就是为了在没有介绍这个概念的时候代替一下概念。

重影就是指变量的名称可以被重新使用的机制:

实例

fn main() {  let x = 5;  let x = x + 1;  let x = x * 2;  println!("The value of x is: {}", x);  
}  

这段程序的运行结果:

The value of x is: 12

重影与可变变量的赋值不是一个概念,重影是指用同一个名字重新代表另一个变量实体,其类型、可变属性和值都可以变化。但可变变量赋值仅能发生值的变化。

let mut s = "123";
s = s.len();

这段程序会出错:不能给字符串变量赋整型值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)

📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 Loewen丶原创,首发于 CSDN,转载注明出处🙉&…

解决docker alpine /bin/sh: ./main: not found

解决docker alpine /bin/sh: ./main: not found golang中编译之后的二进制文件部署在alpine镜像中出现了not found问题解决这种情况是因为动态链接库位置错误导致的,alpine镜像使用的是musl libc而不是gun libc。因而动态链接库的位置不一致。在基础镜像内执行&…

shell脚本报错 syntax error near unexpected token `$‘do\r‘‘

在我执行docker-compose up 的时候会去执行一个shell文件,如下图报错 看代码并未发现什么特别的错误 解决方案打开编辑器把分割符CRLF换成LF重新运行,其实是shell的换行符导致的

Elasticsearch的批量bulk 提交 写入的方式会有顺序问题吗?

Elasticsearch的分布式特性可能会导致写入操作的执行顺序与提交顺序稍有不同。在分布式环境中,Elasticsearch将数据分散到不同的节点上进行存储和处理,因此写入操作的执行顺序可能会受到网络延迟、负载均衡等因素的影响。 根源在于ES的分布式架构。如上图所示,客户端的命令首…

企业怎么选海外呼叫中心?企业在选择海外呼叫中心时需要考虑哪些关键因素呢?

在当今竞争激烈的商业环境下,企业需要建立一个高效可靠的海外呼叫中心来处理不同国家地区客户的需求和问题。选择合适的呼叫中心对于企业的发展至关重要。那么企业在选择海外呼叫中心时需要考虑哪些关键因素呢? 1.企业在选择海外呼叫中心之前应该明确自…

带大家做一个,易上手的家常辣椒炒鸡蛋

先打四五个鸡蛋 将鸡蛋搅拌均匀 绿辣椒切片 起锅烧油 倒入鸡蛋液 注意用锅铲过一会儿就动一动 别让鸡蛋粘锅了 鸡蛋定型后 用锅铲分成小块 然后 倒入绿辣椒 小半勺生抽 鸡蛋差不多了 就倒入少量盐(一点点就好) 然后 如果有条件 可以倒入一点点 孜然粉胡椒粉 然后就可以装…

问题表达式

问题表达式 目录 一. 概述二. 例题1. 例子一2. 例子二3. 例子三4. 例子四 三. 分析四. 总结 一. 概述 表达式的求值部分由操作符的优先级决定。但有时会由于编码的不规范,会导致表达式执行顺序混乱&#xf…

文件夹加密有哪些好处?电脑重要文件夹怎么加密?

对于每个使用电脑的人来说,文件夹是非常熟悉的数据管理工具。但文件夹并不具备安全保护功能,很容易导致数据泄露。因此,我们需要对文件夹进行加密。那么,电脑重要文件夹该怎么加密呢?下面我们就来一起了解一下。 文件夹…

【MAC】M2 安装docker 与 mysql

一、docker下载地址 下载地址 二、安装docker完成 罗列一下docker常用命令 # 查看docker版本 docker --version# 拉取镜像 docker pull 镜像名# 查看当前所有镜像 docker images# 查看运行中的容器 docker ps -a docker ps grep| 镜像名#镜像启动操作: sudo dock…

paddleocr 下载超时换源百度 ReadTimeOutError

pip install “paddleocr>2.0.1” -i https://mirror.baidu.com/pypi/simple

Axure中继器案例:中继器的repeater属性,中继器的Item属性

一.中继器的repeater属性 Repeater: 中继器的对象 visibleltemCount: 中继器项目列表中可见项的数量 ltemCount: 加载项数量 dataCount:获取中继器数据集中数据行的总数量 pageCount: 获取中继器分页的总数量,即能够获取分页后共有多少页 pagelndex: 获取中继器项目…

强大矢量图编辑器 Boxy SVG 激活最新

Boxy SVG for Mac功能介绍 1、干净,直观的UI深受Inkscape,Sketch和Adobe illustrator的启发 2、广泛支持画布上编辑对象几何,转换,绘画和其他属性 3、保存为SVG和SVGZ格式,导出为PNG,JPG,WebP和…

TypeScript 中的高级类型(联合、交叉、泛型、映射类型)

文章目录 一、联合类型(Union Types)二、交叉类型(Intersection Types)三、泛型3.1 泛型结合extends3.2 泛型结合 keyof3.3 extends keyof 和 in keyof 的区别 四、条件类型(Conditional Types) TypeScript…

音视频技术开发周刊 | 324

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 467亿参数MoE追平GPT-3.5!爆火开源Mixtral模型细节首公开,中杯逼近GPT-4 今天,Mistral AI公布了Mixtral 8x7B的技术细节,不…

Apache Doris 在奇富科技的统一 OLAP 场景探索实践

导读:随着消费信贷规模快速增长,个人信贷市场呈现场景化、体验感强的特征,精准营销、精细化风险管理以及用户使用体验的优化愈发重要。作为中国卓越的由人工智能驱动的信贷科技服务平台,奇富科技选择将 Apache Doris 作为整体 OLA…

【离散数学】——期末刷题题库(树其一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

城市智能图书柜需求说明书

1. 简介 1.1 项目概括 本项目主要实现智能图书柜对图书的借出、还回、续借、查询、上下架、盘点的功能,对于读者,可以进行读者证的办理,读者信息的录入和完善。 1.2 项目背景 ​ 目前大量读者距离图书馆较远,无法方便、快捷地…

IDEA运行JSP启动后页面中文乱码

源代码截图&#xff1a; 运行结果截图&#xff1a; 在<head>标签内加入代码 <% page contentType"text/html; charsetgb2312"%> 重启服务器&#xff0c;问题已改善 ————————————————— 该文仅供学习以及参考&#xff0c;可做笔记收藏…

泛型深入理解

泛型的概述 泛型&#xff1a;是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 泛型的格式&#xff1a;<数据类型>; 注意&#xff1a;泛型只能支持引用数据类型。 集合体系的全部接口和实现类都是支持泛型的使用的。 泛型的…

【功能更新】支持文档合并导出PDF/HTML格式;线上文章SEO设置能力优化

HelpLook功能更新速览&#x1f447; 文档管理能力&#xff1a; 1. 导出支持多篇文档合在一个HTML文件 2. 支持下载附件时保留原始文件名 3. 主页“推荐文章”支持添加外链 4. 文章URL根据标题自动生成 5. 文章支持添加“作者” 6. 博客模版支持置顶文章 1.导出支持多篇文…