Rust之语法<3>数据类型

Rust已经定义好了许多数据类型,当然标准库也提供了大量有用的数据类型,不过这些数据类型是最基本的。

Booleans

Rust有内建的boolean 类型,命名为:bool 。它有两个值:truefalse

let x=true;
let y:bool=false;

char

char 类型代表了一个单独的Unicode字符值。你可以使用” ’ “来创建char

let x='x';
let two_hearts='��';

与其他编程语言不通,Rust的char 不是一个字节,而是四个字节。

数字类型

Rust有许多种类型的数字类型:有符号和无符号、字节大小固定的和字节大小变化的、浮点型和整数型。
这些类型包括两部分:数字类别和字节大小。例如,u16 就是无符号类型和16位大小。更多的字节可以让你有更大的书。

如果一个数字字面上无法让编译器推断出它的类型,则它默认是这样的:

let x = 42; // x has type i32

let y = 1.0; // y has type f64

这里列出不同的数字类型:i7、i16、i32、i64、u8、u16、u32、u64、size、size、f32、f64

数组

像许多编程语言一样,Rust有表类型来代表一系列东西。最基本的类型是数组,数组是相同类型元素的集合,默认数组是不可改变的:

let a=[1,2,3];//a:[i32;3]
let mut m=[1,2,3];//m:[i32;3]

数组有数据类型[T;N] 。我们会在稍后的章节讨论TN 是编译时的常量,代表着数组的长度。

有一个快速的方法来为数组的每个元素赋予相同的值。在下面的例子中,我们将数组的每个元素赋值为0:

let a=[0;20]; //a:[i32;20]

我们可以通过a.len() 这个表达式来获取数组” a “中的元素个数,即数组长度。

let a=[1,2,3];
println!("a has { } elements",a.len());

你可以通过下标来获取特定的数组元素:

let names=["chuang","jie","ting"]; //names:[&str;3]
println!("The second name is :{}",names[1]);

像大多数编程语言一样,下标从0开始,所以第一个元素是names[0]。如果你使用了一个不在数组中的下标,你就会得到一个错误:array access is bounds-checked at run-time。如此的错误正是其他系统编程语言中许多错误的来源。

Slices(暂且翻译成”碎片”)

碎片指的的是另一种数据结构。碎片能够用来安全、有效地获取数组的一部分,而不用复制。例如,你可能想把文件中的一行内容读到内存中。碎片不会直接创建的,而是从一个存在的变量中创建的。碎片有长度,可变或者不可变,在许多方面都和数组相似:

let a=[0,1,2,3,4];
let middle=&a[1..4]; //数组a的碎片,就是元素1,2,3
let complete=&a[..];//数组a的全部元素

碎片有类型&[T]

str

Rust的str 类型是最基本的字符串类型。作为一个没有大小的类型,自身并没有什么用,但是放在引用后面却是非常有用,比如&str

元组(Tuples)

元组是一个固定大小的、有顺序的表,就像这样:

let x=(1,"hello");

括号(和逗号 构成了这个长度为2的元组。下面是相同的代码,但是声明了类型:

let x:(i32,&str)=(1,"hello");

就像你看到的那样,元组的类型看起来像元组,只不过每个位置放的是类型名称,而不是值。细心的读者发现:元组中的元素是各种类型的,在这个元组中,我们有i32&str 这两种类型。在系统编程语言中,字符串比其他语言中的字符串要复杂的多。现在,只需把&str 看作是字符串片段。

如果两个元组有相同的类型和元素数量(官网叫法”arity”),那么你可以将一个元组赋值给另一个元组。如果元组包含的元素数量相同的话,那么它们的” arity “是相同的。

let mut x=(1,2);//x:(i32,i32)
let y=(2,3);//y:(i32,i32);
x=y;

你可以像下面这样获得元组中的元素:

let (x,y,z)=(1,2,3);
println!("x is {}",x);

讲解:
我们把一个模式放在let的左侧,如果它搭配右侧的话,我们可以一次性进行多个值绑定。

你可以在()中添加, 来消除单个元素的元组歧义:

(0,);//该元组只含有一个元素
(0);

你可以通过索引的语法来获得元组中的元素:

let tuple=(1,2,3);
let x=tuple.0;
let y=tuple.2

像数组索引一样,元组也是从0开始的,但和数组不同,元组是通过.,而不是[]

Functions函数

函数也有一种类型:

fn foo(x:i32)->i32{x}
let x:fn(i32)->i32=foo;

在这个例子中,x是一个函数的指针,该函数参数是i32 类型,返回值是i32类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值