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. 布尔类型 truefalse
  4. 字符类型 表示单个 Unicode 字符,存储为 4 个字节(这里和C++ 的 字符类型char 区分, char 只占一个字符
  5. 单元类型 即 () ,其唯一的值也是 ()
    1. 在Rust中单元类型,和元组是不一样的,虽然都是有括号。
    2. 具体来说元组是一种可以包含多个不同类型的值的数据结构,而单元类型是一种没有任何值的类型。元组可以用来组织和传递多个值,而单元类型主要用于表示函数没有返回值的情况。
    3. 元组可以是空元组,其中没有任何元素()表示。 和单元类型的区分在于所处位置。见下面代码
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::<i32>()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值