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::()。

目录
相关文章
|
7天前
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
21 1
|
8天前
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
20 2
|
9天前
|
Rust 安全 云计算
Rust语言入门:安全性与并发性的完美结合
【10月更文挑战第25天】Rust 是一种系统级编程语言,以其独特的安全性和并发性保障而著称。它提供了与 C 和 C++ 相当的性能,同时确保内存安全,避免了常见的安全问题。Rust 的所有权系统通过编译时检查保证内存安全,其零成本抽象设计使得抽象不会带来额外的性能开销。Rust 还提供了强大的并发编程工具,如线程、消息传递和原子操作,确保了数据竞争的编译时检测。这些特性使 Rust 成为编写高效、安全并发代码的理想选择。
11 0
|
5月前
|
Rust Linux iOS开发
【Rust学习】01_入门准备
让我们开始您的 Rust 之旅吧!有很多东西要学,但每一段旅程都是从第一步开始的,在本章中,我们将一起来学习以下知识点: - 在 Linux、macOS 和 Windows 上安装 Rust - 编写打印程序 Hello, world! - 使用 cargo Rust 的包管理器和构建系统
77 1
|
5月前
|
Rust 开发者
Rust函数入门与函数重载
Rust函数入门与函数重载
117 0
|
6月前
|
Web App开发 Rust 安全
一名C++程序员的Rust入门初体验
作者最近尝试写了一些Rust代码,本文主要讲述了对Rust的看法和Rust与C++的一些区别。
|
6月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
55 0
|
Rust
Rust 基础入门 —— 语句与表达式
语句与表达式 这一节,我们接触的是rust中的有一个基本类型 我将其称之为 —— 逻辑结构,这个是我自己命名的,但我觉得很贴切。
58 3
|
Rust Go
Rust 基础入门 —— 字符、布尔、单元 类型
布尔类型(bool) 说明一点,bool类型的应用场景 主要就是用在流程控制中,
108 2
|
12月前
|
Rust 安全 编译器
Rust 基础入门 —— 2.3.所有权和借用 (二)
同一时刻,你只能拥有要么一个可变引用, 要么任意多个不可变引用 引用必须总是有效的 贴一个体验不错的学习链接恰饭:学习链接
84 0