当前位置: 首页 > news >正文

Rust入门 之一

Rust入门 之一

  • 数据类型
    • 基本数据类型
      • 标量类型
        • 整数类型
        • 浮点类型
        • 布尔类型
        • 字符类型
      • 复合类型
        • 元组类型
        • 数组类型
    • 类型转换
    • 常量后缀类型表达
    • 类型推导
    • 类型别名

数据类型

Rust 提供了多种机制来更改,或定义基本类型和用户自定义类型。

  • 基本数据类型
  • 类型转换
  • 指定字面量所需的类型
  • 类型推断
  • 类型别名

基本数据类型

rust 中的每个值都具有特定的数据类型,这告诉 Rust 所指定的数据类型,以便它知道如何处理这些数据。我们将介绍两种数据类型子集

  • 标量
  • 复合类型

rust 是一种静态类型语言,这意味着,它必须在编译时知道所有变量的类型。编译器通常可以根据值,及其使用方式推断出我们想要使用的类型。在存在多种可能类型的情况下,使用parse将字符串转换为数值类型时,我们必须添加类型注解。

let guess: u32 = "152".parse().expect("Not a number!");

标量类型

标量类型表示单个值。Rust 有四种主要的标量类型:整数、浮点数、布尔值和字符。你可能在其他编程语言中也见过这些类型。让我们深入了解它们在 Rust 中的工作原理。

整数类型

整数是不包含小数部分的数字。下表显示了Rust 中的内置整数类型。我们可以使用其中任何一种来声明整数值的类型。

数据类型长度有符号数无符号数
8位i8u8
16位i16u16
32位i32u32
64位i64u64
128位i128u128
依赖架构isizeusize
浮点类型

Rust 还提供了两种用于表示浮点数的基本类型

  • f32,32位浮点数
  • f64,64位浮点数

默认类型是 f64。所有浮点类型都是有符号的。

    let x = 2.0; // f64, 约定浮点类型let y: f32 = 3.0; // f32
布尔类型

与大多数其他编程语言一样,Rust 中的布尔类型只有两个可能的值:true 和 false。布尔类型的大小是一个字节。Rust 中的布尔类型使用 bool 来指定。

    let t = true;let f: bool = false; // with explicit type annotation
字符类型

Rust 的 char 类型是该语言最基本的字母类型。

    let c = 'z';let z: char = 'ℤ'; // with explicit type annotation

复合类型

复合类型可以将多个值组合成一个类型。Rust 有两种基本复合类型

  • 元组
  • 数组
元组类型

元组是一种将多个不同类型的值组合成一个复合类型的通用方法。元组的长度是固定的。一旦声明,其大小就不能增加或减少。

我们通过在括号内编写以逗号分隔的值列表来创建元组。元组中的每个位置都有一个类型,元组中不同值的类型不必相同。

let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup;let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;

变量 tup 绑定到整个元组,因为元组被视为一个单一的复合元素。要从元组中获取各个值,我们可以使用模式匹配来解构元组值。

数组类型

另一种存储多个值的方法是使用数组。与元组不同,数组中的每个元素必须具有相同的类型。
我们将数组中的值写成用逗号分隔,并放在方括号内的列表:

let a = [1, 2, 3, 4, 5];
let weekdays = ["Mon.","Tu.", "Wed.", "Thur.", "Fri.", "Sat.", "Sun."];

类型转换

Rust 不支持原始类型之间的隐式类型转换。但是,可以使用as关键字进行显式类型转换。
整型之间的转换规则,通常遵循C语言的约定,除非 C 语言中存在未定义行为的情况。Rust 中所有整型之间的强制转换行为都已明确定义。

    let decimal = 65.4321_f32;// Explicit conversionlet integer = decimal as u8;let character = integer as char;

常量后缀类型表达

数值常量类型可以通过添加类型后缀进行类型注解。例如,要指定数值常量89的类型为i32,可以写成 89i32。

未添加后缀的数值常量类型取决于它们的使用方式。如果没有类型约束,编译器将使用i32表示整数,使用 f64 表示浮点数。

let x = 25u8;
let y = 512u32;
let z = 3f32;

类型推导

Rust类型推导非常智能。它不仅在初始化时,检查值表达式的类型,还会检查变量之后的使用方式,来推导其类型。

let elem = 5u32;
let mut v = Vec::new();
v.push(elem);

代码例子

fn main() {let elem = 1024u32;let mut v = Vec::new();v.push(elem);v.push(125);println!("{:?}", v);
}

屏幕输出

[1024, 125]

类型别名

可以使用 type 语句为现有类型指定新名称。类型名称必须使用UpperCamelCase名,否则编译器会发出警告。此​​规则的例外情况是,基本类型usize、f32 等。

UpperCamelCase是一种命名规则,其中复合词或短语中每个单词的首字母都大写,且不加空格或其他分隔符。

// NanoSecon, Inch, and U64 are new names for u64.
type NanoSecond = u64;
type Inch = u64;
type U64 = u64;
http://www.dtcms.com/a/613546.html

相关文章:

  • “伪”局域网
  • C语言编译软件Mac | 在Mac上选择最合适的C语言编译工具
  • 怎么样建设一个网上教学网站网页版微信二维码不能直接识别
  • Linux BPF 技术深度解析:从原理到实践
  • 高端网站报价wordpress如何添加背景音乐
  • C# 对多个任务进行符合管理
  • 在Eclipse IDE for Embedded C/C++ Developers软件中定义的宏,编译C源文件时编译器无法找到宏定义!
  • 从局域网到全网可用!PDFMathTranslate 翻译工具的进阶使用法
  • 深入理解 JavaScript 异步编程:从单线程到 Promise 的完整指南
  • 怎么自己做歌曲网站沈阳网站建设方案策划
  • 电脑卡顿因重复文件?AllDup无安装版快速查重+批量删除 文件管理混乱?AllDup多模式查重工具,Python开发者也能高效用
  • Dubbo Mock机制详解:服务降级与本地测试的利器
  • JDBC与事务的协同:ThreadLocal的巧妙运用
  • 底层视觉及图像增强-项目实践理论补充(十六-0-(13):HDR技术全链路解析:从原理到LED显示工程实践):从奥运大屏,到手机小屏,快来挖一挖里面都有什么
  • 深圳服务平台网站网站提示域名解析错误怎么办
  • 论文阅读13——基于大语言模型和视觉模态融合的可解释端到端自动驾驶框架:DriveLLM-V的设计与应用
  • 考研408--数据结构--day2--顺序表及其增删改查
  • 软件演示环境动态扩展与成本优化:基于目标跟踪与计划扩展的AWS Auto Scaling策略
  • 网站设计的资质叫什么花蝴蝶韩国免费视频
  • AI Agent 之工具使用:从函数定义到实际应用
  • 【C++】 map/multimap底层原理与逻辑详解
  • 如何利用国外网站开发客户wordpress的免费模板
  • C++、Java 还是测试开发?
  • Java 开发 - 粘包处理器 - 基于消息头 + 消息体(魔数验证、长度验证)
  • Spring Cloud Data Flow 简介
  • 前端性能优化指标,首次内容绘制与交互时间
  • MySQL :实用函数、约束、多表查询与事务隔离
  • 【Java架构师体系课 | MySQL篇】③ Explain执行计划详解
  • Bugku-web题目-xxx二手交易市场
  • 织梦 图片网站武冈 网站建设