Rust 基础入门 —— 基本类型

简介: 当然,作为强类型,也不一定要全部推导,可以通过对变量进行类型标注的操作,完成对类型的显式说明,通过这样的方式就可以减小推导时间,特别是在复合类型中应用这样的方式。

概述:

在Rust 中,作为强类型语言,自然会独立一块内容用作类型管理工作,而rust 中 为应用领域的扩展, 兼容了很多的数学计算方面的 内容,加到了基本类型中,例如 复数, 在有向图和 矢量图计算中的应用,rust 通过自带的类型设计避免了 程序员再开发的任务难度。


总的来说,rust 的数据类型分为两类, 基本类型和 复合类型,这点和C++蛮像的。


接下来简单介绍一下 基本类型。然后进一步介绍 语句和表达式、函数。


基本类型

  1. 数值类型


  1. 有符号 整形 (i8, i16, i32, i64, isize)
  2. 无符号 整形(i8, i16, i32, i64, isize)
  3. 浮点 (f32, f64)
  4. 有理数
  5. 复数

2.字符串


  1. 字符串 字面量 (指 字符串)
  2. 字符串 切片 (&str)

3.布尔类型 true和false

4.字符类型 表示单个 Unicode 字符,存储为 4 个字节(这里和C++ 的 字符类型char 区分, char 只占一个字符)

5.单元类型 即 () ,其唯一的值也是 ()

在Rust中单元类型,和元组是不一样的,虽然都是有括号。

具体来说元组是一种可以包含多个不同类型的值的数据结构,而单元类型是一种没有任何值的类型。元组可以用来组织和传递多个值,而单元类型主要用于表示函数没有返回值的情况。

元组可以是空元组,其中没有任何元素用 ()表示。 和单元类型的区分在于所处位置。见下面代码

fn return_unit() -> () {
    // 函数返回单元类型 这里的 -> 之后的() 就代表单元类型。
}
fn main() {
    let empty_tuple = ();
    let unit_value = return_unit();
    println!("{:?}", empty_tuple); // 输出: ()
    println!("{:?}", unit_value); // 输出: ()
}


静态语言的类型推导


初次接触类型推导是在 Python中, 后来在JavaScript 中也遇到一些, 但是在动态语言中推导类型,明显是会拉低运行速度的,特别是复合类型传递。


静态语言 rust 通过编译器,也实现了类型推导,但是这个其实可以类比C++中的正则表达式, 其实是让编译器自己决定是什么类型,然后按照对应的类型编写成汇编代码,链接成程序。


所以静态语言的类型推导,不是运行时推导,静态语言的类型推导,是编译时推导。 当然这可能导致编译时间过长的问题,这个还需要再在后续使用中实际体验后才能记录。


类型标注


当然,作为强类型,也不一定要全部推导,可以通过对变量进行类型标注的操作,完成对类型的显式说明,通过这样的方式就可以减小推导时间,特别是在复合类型中应用这样的方式。


let guess = "42".parse().expect("Not a number!");


Compiling playground v0.0.1 (/playground)  
error[E0282]: type annotations needed  
--> src/main.rs:4:5  
|  
4 | let guess = "42".parse().expect("Not a number!");  
| ^^^^^  
|  
help: consider giving `guess` an explicit type  
|  
4 | let guess: /* Type */ = "42".parse().expect("Not a number!");  
| ++++++++++++  
For more information about this error, try `rustc --explain E0282`.  
error: could not compile `playground` (bin "playground") due to previous error


先忽略 .parse().expect.. 部分,这段代码的目的是将字符串 "42" 进行解析,而编译器在这里无法推导出我们想要的类型:整数?浮点数?字符串?因此编译器会报错:


$ cargo build
   Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
error[E0282]: type annotations needed
 --> src/main.rs:2:9
  |
2 |     let guess = "42".parse().expect("Not a number!");
  |         ^^^^^ consider giving `guess` a type


因此我们需要提供给编译器更多的信息,例如给 guess 变量一个显式的类型标注:let guess: i32 = ... 或者 "42".parse::()。

目录
相关文章
|
10天前
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
6 0
|
2月前
|
Web App开发 Rust 安全
一名C++程序员的Rust入门初体验
作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。
158 3
|
2月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
36 0
|
8月前
|
Rust
Rust 基础入门 —— 语句与表达式
语句与表达式 这一节,我们接触的是rust中的有一个基本类型 我将其称之为 —— 逻辑结构,这个是我自己命名的,但我觉得很贴切。
40 3
|
8月前
|
Rust Go
Rust 基础入门 —— 字符、布尔、单元 类型
布尔类型(bool) 说明一点,bool类型的应用场景 主要就是用在流程控制中,
62 2
|
8月前
|
Rust 安全 编译器
Rust 基础入门 —— 2.3.所有权和借用 (二)
同一时刻,你只能拥有要么一个可变引用, 要么任意多个不可变引用 引用必须总是有效的 贴一个体验不错的学习链接恰饭:学习链接
52 0
|
8月前
|
Rust 安全 算法
Rust 基础入门 ——所有权 引言 :垃圾自动回收机制的缺陷。
能有这些问题的部分发生场景: 游戏开发:在游戏开发中,需要保持稳定的帧率和低延迟,以提供流畅的游戏体验。如果GC频繁触发或停顿时间过长,会导致游戏卡顿或掉帧,影响游戏的流畅度和响应性能。
79 0
|
8月前
|
存储 Rust 安全
Rust 基础入门 —— 2.3.所有权和借用
写在前面的序言 因为我们这里实际讲述的内容是关于 内存安全的,所以我们最好先复习一下内存的知识。
31 0
|
8月前
|
Rust 安全 编译器
Rust 基础入门 —— 函数
当用 ! 作函数返回类型的时候,表示该函数永不返回( diverge function ),特别的,这种语法往往用做会导致程序崩溃的函数:
33 0
|
29天前
|
Rust 安全 开发者
探索Rust语言的内存安全特性
【6月更文挑战第8天】Rust语言针对内存安全问题提供了创新解决方案,包括所有权系统、借用规则和生命周期参数。所有权系统确保值与其所有者绑定,防止内存泄漏;借用规则保证同一时间只有一个可变引用或多个不可变引用,消除数据竞争和野指针;生命周期参数则强化了引用的有效范围,提升安全性。通过这些特性,Rust帮助开发者编写出更健壮、安全的高性能软件,有望成为系统编程领域的领头羊。