rust学习笔记-变量和类型(代码片段)

柳清风09 柳清风09     2022-10-23     482

关键词:

变量

通常一门的语言的变量是没有啥可以说道的,无法就是变量命名规则:以字母、下划线和数字组成,并且数字不能开头,没啥好说的。
但rust的变量奇怪的地方是,

变量不可变

譬如这样一个简单到不能再简单的代码

fn main() 
    let a =4;
    a = 3;
    println!("",a)

编译的时候就会报错

3 |     a = 3;
  |     ^^^^^ cannot assign twice to immutable variable

不能二次分配不可变变量,请记住rust的变量不可变。那如何让它可变呢?请使用mut 关键字,

fn main() 
    let mut a =4;
    a = 3;
    println!("",a)


上面的的代码虽然可以正常运行,但还是会有有一个warn的警告,提示read前变量值会被覆盖。

 |     let mut a =4;
  |         ^^^^^
  |
  = note: `#[warn(unused_assignments)]` on by default
  = help: maybe it is overwritten before being read?

可见,rust对于变量的赋值管理的非常严格。这里还有一个小细节,需要区分赋值和初始化

fn main() 
    let a:i32;
    a = 3;
    println!("",a)

上面的代码没有问题,因为a=3 是初始化操作。

类型

整数

整数类型有符号无符号
8biti8u8
16biti16u16
32biti32u32
64biti64u64
128biti128u128
指针isizeusize

其他的类型如浮点、char都没有啥特别的地方。

tuple和struct

元组在很多语言都支持,譬如Python。rust的元组也没有啥特别之处

  let a = (3, false);
  println!(":?", a);

struct 也类似

fn main() 
    let p = Pointx:3,y:4;
    println!(":?", p);


#[derive(Debug)]
struct Point 
  x : i32,
  y : i32,


除此之外还有一个tuple struct,对你没听错,就是他两的组合体。对比枚举使用 ()、struct 使用 ,tuple struct长的有点四不像,使用枚举() ,结合struct的定义。

 struct Color(i32, i32, i32);

eume

rust和其他语言还有个不同点是枚举类型。

  fn main() 
  let a: Number= Number::Int(10);
   read_num(&a);
   let b: Number= Number::Float(10.0);
   read_num(&b);
    

  fn read_num(num: &Number)
    match num 
    &Number::Int(value) => println!("Integer ", value),
    &Number::Float(value) => println!("Float ", value),
    
  
 

enum Number 
    Int(i32),
    Float(f32),


这种match表达是go和java里面的switch类似。

类型转换

rust 采用了显示的方式进行类型转换

let varl : i32 = 41;
let var2 : i16 = varl as i16;

相比很多语言采用的隐式转换,rust这种做法能够避免很多类型转化造成的异常。

类型推导


之所以我使用截图,是因为IDE已经可以看到推导的类型了,编译器会根据我塞入的数据的类型推导vec的类型。

前端综合学习笔记---变量类型原型链作用域和闭包(代码片段)

变量类型  JavaScript是一种弱类型脚本语言,所谓弱类型指的是定义变量时,不需要什么类型,在程序运行过程中会自动判断类型。ECMAScript中定义了6种原始类型:BooleanStringNumberNullUndefinedSymbol(ES6新定义)注意:原始类型不包... 查看详情

rust学习笔记1.基础语法(代码片段)

文章目录Rust的基本语法0、猜字游戏1、Cargo是什么2、输出字符串3、基础语法赋值重影4、Rust的数据类型5、Rust的注释6、Rust的函数函数体的语句和表达式函数返回值7、条件语句8、循环语句9、所有权Rust的所有权内存的分配变量与... 查看详情

javascript学习笔记——基础数据类型和运算符总结(代码片段)

JavaScript学习笔记——基础数据类型和运算符总结照例还是先来目录一.数据类型二.运算符一.数据类型基础数据类型number数字类型包含所有数字(整数,小数,正数,负数,极大,极小数),infinity,NaNstring字符串类型引号包含的... 查看详情

rust学习教程21-option和模式匹配(代码片段)

...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433解构Option在枚举那一章,提到过Option枚举变量是用来解决Rust中一个变量是否有值的问题,定义如下:enumOption<T>Some(T),None,总而言之... 查看详情

go语言学习笔记—基础—基本语法—常量与变量—变量的数值类型转换(代码片段)

go语言使用类型前置加括号的方式进行类型转换。格式若A是一个全新的类型,需要加:;若之前已经声明过A,则不需要加:。其中,TypeOfA代表要转换的类型,B包括变量、复杂算子和函数返回值等表达式。A[:]=... 查看详情

typescript学习笔记—类型推断和类型保护(代码片段)

目录类型推断1.赋值推断2.返回值推断3.函数推断(反向推断)4.属性推断5.类型反推6.索引访问操作符7.类型映射类型保护1.typeof类型保护2.instanceof类型保护3.in类型保护4.可辨识联合类型5.null保护6.自定义类型保护类型推断TypeScript编译... 查看详情

swift学习笔记之---使用if和let处理空变量(代码片段)

在Swift程序中,结合if和let,可以方便地处理空变量(nullablevariable),使用可选绑定(optionalbinding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语... 查看详情

java学习笔记1(datawhale教程):基本数据类型与变量(代码片段)

java学习笔记1(datawhale教程):基本数据类型与变量这是今年datawhale7月组队学习的开源内容,当时没有报,现在去学一学😄👉链接同时结合了runoob上的教程:https://www.runoob.com/java/java-basic-syntax.html文章目录java学习笔记1... 查看详情

go语言学习笔记—基础—基本语法—常量与变量—变量的类型零值(代码片段)

类型零值当一个变量或者新值被创建时,如果没有为其明确指定初始值,go语言会自动初始化对应类型的零值。零值并不等于空值,而是当变量被声明为某种类型后的默认值。各类型零值如下:布尔型变量的默认... 查看详情

rust学习教程28-深入类型转换(代码片段)

...t语言圣经>>一书欢迎大家加入Rust编程学院,一起学习交流:QQ群:1009730433类型转换Rust是类型安全的语言,因此在Rust中做类型转换不是一件简单的事,这一章节我们将对Rust中的类型转换进行详尽讲解。as转换先... 查看详情

rust学习--变量(代码片段)

0x0每种编程语言都有变量的概念,我们可以把变量理解为最简单的存储方式,它是编码过程中是必不可少的。Rust的变量很有特色。变量不可变的特性让人想起了Erlang。以及后面的模式匹配,我觉得作者应该受Erlang影响很大。下... 查看详情

threadlocal学习笔记(代码片段)

概念ThreadLocal用于提供线程局部变量,在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。也就是说ThreadLocal可以为每个线程创建一个【单独的变量副本】,相当于线程的privatestatic类型变量。ThreadLocal的作... 查看详情

python100天学习笔记day24js基本语法(代码片段)

JavaScript基本语法语句和注释变量和数据类型声明和赋值简单数据类型和复杂数据类型变量的命名规则表达式和运算符赋值运算符算术运算符比较运算符逻辑运算符分支结构if...else...switch...cas...default...循环结构for循环while循环do...... 查看详情

go语言学习笔记—进阶—反射:反射的类型对象(reflect.type)—指针和指针指向的元素(代码片段)

对指针变量获取反射类型对象时,通过reflect.Elem()方法,获取指针变量指向的元素类型,即取元素,等效于对指针变量做一个*操作。packagemainimport( "fmt" "reflect" "testing")funcmain() typecatstruct ins: 查看详情

c++学习笔记(代码片段)

C++学习笔记C++简介C++基本语法C++修饰符类型C++运算符C++数据类型C++变量类型C++变量C++常量C++循环C++判断C++函数C++数字C++数组C+ 查看详情

spark基础学习笔记09:scala基础(代码片段)

文章目录零、本讲学习目标一、变量声明(一)简单说明(二)利用val声明变量1、声明方式2、案例演示(三)利用var声明变量1、声明方式2、案例演示(四)换行输入语句(五)同时声明多... 查看详情

尹成学院golang学习快速笔记类型(代码片段)

1.1 变量 Go 是静态类型语⾔,不能在运⾏期改变变量类型。 使⽤关键字 var 定义变量,⾃动初始化为零值。如果提供初始化值,可省略变量类型,由编译器⾃动推断。varxintvarffloat32=1.6vars="abc"在函... 查看详情

freertosfreertos学习笔记—学习freertos的编程风格和本质(代码片段)

FreeRTOS的编程风格学习一个RTOS,搞懂它的编程的风格很重要,这可以大大提供我们阅读代码的效率。下面我们就以FreeRTOS里面的数据类型、变量名、函数名和宏这几个方面做简单介绍。1、数据类型在FreeRTOS中,使用的... 查看详情