📅  最后修改于: 2020-11-02 04:12:12             🧑  作者: Mango
类型系统表示语言支持的不同类型的值。类型系统在提供的值被程序存储或操纵之前检查其有效性。这样可以确保代码的行为符合预期。类型系统还允许更丰富的代码提示和自动化文档。
Rust是一种静态类型的语言。 Rust中的每个值都是某种数据类型。编译器可以根据分配给它的值自动推断变量的数据类型。
使用let关键字声明一个变量。
fn main() {
let company_string = "TutorialsPoint"; // string type
let rating_float = 4.5; // float type
let is_growing_boolean = true; // boolean type
let icon_char = '♥'; //unicode character type
println!("company name is:{}",company_string);
println!("company rating on 5 is:{}",rating_float);
println!("company is growing :{}",is_growing_boolean);
println!("company icon is:{}",icon_char);
}
在上面的示例中,将从分配给变量的值中推断出变量的数据类型。例如,Rust将字符串数据类型分配给变量company_string ,将float数据类型分配给rating_float ,等等。
println!宏接受两个参数-
占位符将替换为变量的值
上面的代码片段的输出将是-
company name is: TutorialsPoint
company rating on 5 is:4.5
company is growing: true
company icon is: ♥
标量类型表示单个值。例如10,3.14,’c’。 Rust具有四种主要的标量类型。
我们将在后续部分中了解每种类型。
整数是没有小数部分的数字。简而言之,整数数据类型用于表示整数。
整数可以进一步分为有符号和无符号。有符号整数可以存储负值和正值。无符号整数只能存储正值。下面是否给出整数类型的详细说明-
Sr.No. | Size | Signed | Unsigned |
---|---|---|---|
1 | 8 bit | i8 | u8 |
2 | 16 bit | i16 | u16 |
3 | 32 bit | i32 | u32 |
4 | 64 bit | i64 | u64 |
5 | 128 bit | i128 | u128 |
6 | Arch | isize | usize |
整数的大小可以为arch 。这意味着数据类型的大小将从机器的体系结构中得出。 x86机器上为arch的整数是32位,x64机器上是64位。索引某种集合时,主要使用拱形整数。
fn main() {
let result = 10; // i32 by default
let age:u32 = 20;
let sum:i32 = 5-15;
let mark:isize = 10;
let count:usize = 30;
println!("result value is {}",result);
println!("sum is {} and age is {}",sum,age);
println!("mark is {} and count is {}",mark,count);
}
输出将如下所示-
result value is 10
sum is -10 and age is 20
mark is 10 and count is 30
如果将age的值替换为浮点值,则以上代码将返回编译错误。
每个带符号的变体可以存储从-(2 ^(n-1)到2 ^(n-1)-1的数字,其中n是变量使用的位数。例如,i8可以存储-(2 ^ 7)到2 ^ 7 -1-在这里我们将n替换为8。
每个无符号变体可以存储从0到(2 ^ n)-1的数字。例如,u8可以存储0到2 ^ 7的数字,等于0到255。
当分配给整数变量的值超过该数据类型的Rust定义范围时,就会发生整数溢出。让我们通过一个例子来理解这一点-
fn main() {
let age:u8 = 255;
// 0 to 255 only allowed for u8
let weight:u8 = 256; //overflow value is 0
let height:u8 = 257; //overflow value is 1
let score:u8 = 258; //overflow value is 2
println!("age is {} ",age);
println!("weight is {}",weight);
println!("height is {}",height);
println!("score is {}",score);
}
无符号u8变量的有效范围是0到255。在上面的示例中,为变量分配的值大于255(Rust中整数变量的上限)。在执行时,以上代码将返回警告-警告-重量,高度和得分变量的u8字面量超出范围。 255之后的溢出值将从0、1、2等开始。无警告的最终输出如下所示-
age is 255
weight is 0
height is 1
score is 2
Rust中的float数据类型可以分为f32和f64 。 f32类型是单精度浮点,而f64具有双精度。默认类型为f64。考虑以下示例,以了解有关float数据类型的更多信息。
fn main() {
let result = 10.00; //f64 by default
let interest:f32 = 8.35;
let cost:f64 = 15000.600; //double precision
println!("result value is {}",result);
println!("interest is {}",interest);
println!("cost is {}",cost);
}
输出将如下所示-
interest is 8.35
cost is 15000.6
Rust不允许自动类型转换。考虑以下代码片段。整数值分配给float变量interest 。
fn main() {
let interest:f32 = 8; // integer assigned to float variable
println!("interest is {}",interest);
}
编译器将引发以下类型不匹配的错误。
error[E0308]: mismatched types
--> main.rs:2:22
|
2 | let interest:f32=8;
| ^ expected f32, found integral variable
|
= note: expected type `f32`
found type `{integer}`
error: aborting due to previous error(s)
为了易于阅读大量数字,我们可以使用视觉分隔符_下划线分隔数字。那50,000可以写成50_000。在下面的示例中显示。
fn main() {
let float_with_separator = 11_000.555_001;
println!("float value {}",float_with_separator);
let int_with_separator = 50_000;
println!("int value {}",int_with_separator);
}
输出如下-
float value 11000.555001
int value 50000
布尔类型有两个可能的值– true或false 。使用bool关键字声明一个布尔变量。
fn main() {
let isfun:bool = true;
println!("Is Rust Programming Fun ? {}",isfun);
}
上面的代码输出将是-
Is Rust Programming Fun ? true
Rust中的字符数据类型支持数字,字母,Unicode和特殊字符。使用char关键字声明字符数据类型的变量。 Rust的char类型表示Unicode标量值,这意味着它可以表示的不仅仅是ASCII。 Unicode标量值的范围从U + 0000到U + D7FF和U + E000到U + 10FFFF(包括两端) 。
让我们考虑一个示例,以更多地了解字符数据类型。
fn main() {
let special_character = '@'; //default
let alphabet:char = 'A';
let emoji:char = '😁';
println!("special character is {}",special_character);
println!("alphabet is {}",alphabet);
println!("emoji is {}",emoji);
}
上面的代码输出将是-
special character is @
alphabet is A
emoji is 😁