Rust语言
2021年接触了区块链,接触了polkadot,接触了Rust
H-KING
学海无涯
展开
-
38.借用与引用
/*1.rust中借用和引用的附带功效都一样,就是都有生命周期。借用使用&关键字,引用使用ref关键字。借用的对象是必须存在的,引用的对象可以虚拟的,后期附上对象。2.match的模式匹配上只能使用 ref,在函数声明上只能使用&来表示引用类型3.非要给区分ref和&到底哪个是引用,哪个是借用。我们可以先从词性划分,引用我归类为名词,而借用归类为动词。&A在表达式上 表示借用A,这是一个动作,那结果就是产出一个引用类型。所以let ref B表示声明了一个引用类型,它.原创 2021-03-12 11:05:42 · 1116 阅读 · 0 评论 -
37.rust属性.txt
=====================================================================================================================================元素 在Rust中,Item是Crate(库)的一个组成部分。它包括 extern crate声明 use声明 模块(模块是一个Item的容器) 函数 type定义 结构体定义 枚举类型定义 常量定义 静.原创 2021-03-09 12:53:36 · 398 阅读 · 0 评论 -
36.rustc编译参数.txt
/* --cfg SPEC - 传入自定义的条件编译参数,使用方法如:rustc --cfg hello main.rs--crate-type - 指定编译输出类型,它的参数包括 rustc --crate-type staticlib myhello.rs 链接库生成.a的链接库 bin - 二进行可执行文件 -> bin或者lib二选一 lib - 编译为库 -> rlib - Rust库 .原创 2021-03-09 12:53:02 · 940 阅读 · 0 评论 -
35.cargo配置参数.txt
######################################################################## 详细教程地址:https://learnku.com/docs/cargo-book/2018/# https://www.jianshu.com/p/22a467204def?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_so.原创 2021-03-09 12:52:05 · 1151 阅读 · 0 评论 -
34.rust宏.txt
/*更多请看:http://blog.hubwiz.com/2020/01/30/rust-macro/https://github.com/rooat/RustLearn/blob/master/src/appendix-04-macros.mdhttps://rustcc.gitbooks.io/rustprimer/content/macro/macro.htmlhttps://rust-by-example.budshome.com/macros.html定义:Rust宏让你可以发.原创 2021-03-09 12:51:34 · 442 阅读 · 0 评论 -
33.文件与 IO.rs
use std::fs;use std::fs::File;use std::fs::OpenOptions;use std::io::prelude::*;use std::io::stdin;fn main() { //Rust 中主函数是个无参函数,环境参数需要开发者通过 std::env 模块取出 let args = std::env::args(); println!("{:?}", args); for arg in args { .原创 2021-03-09 12:50:40 · 284 阅读 · 0 评论 -
32.生命周期注释.rs
/*更多文章参考:https://github.com/rooat/RustLearn/blob/master/src/ch10-03-lifetime-syntax.mdhttps://github.com/rooat/RustLearn/blob/master/src/ch19-02-advanced-lifetimes.md*///返回的是新生成的String,有自己的生命周期,如果使用&str的话生命周期跟随他人fn longer1(s1: String, s2: String.原创 2021-03-09 12:49:55 · 742 阅读 · 0 评论 -
31.错误处理.rs
/*程序中一般会出现两种错误:可恢复错误和不可恢复错误可恢复错误:可恢复错误的典型案例是文件访问错误,如果访问一个文件失败,有可能是因为它正在被占用,是正常的,我们可以通过等待来解决不可恢复错误:由编程中无法解决的逻辑错误导致的,例如访问数组末尾以外的位置对于可恢复错误用 Result<T, E> 类来处理,对于不可恢复错误使用 panic! 宏来处理。enum Result<T, E> { Ok(T), Err(E),}在 Rust 标准库中可能产生.原创 2021-03-09 12:48:57 · 262 阅读 · 0 评论 -
30.并发.rs
/*安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。并发(concurrent)的概念是只程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是"同时执行"。Rust 中通过 std::thread::spawn 函数创建新线程.*/use std::sync::mpsc;use std::thread;use std::time::Duration;fn spawn_function() { for i in 0..原创 2021-03-09 12:48:19 · 223 阅读 · 0 评论 -
29.rust类型转换.rs
/*1.基本类型可以通过显示类型转换机制(as)来实现相互之间的转换。2.Rust通过使用trait来处理定制类型(enum、struct)之间的类型转换。3.通用的类型转换一般使用的trait为From和To。Rust孤儿原则:在声明trait和impl trait的时候,Rust规定了一个Orphan Rule(孤儿规则):impl块要么与trait的声明在同一个的crate中,要么与类型的声明在同一个crate中。也就是说,不能在一个crate中,针对一个外部的类型,实现一个外部的tr.原创 2021-03-09 12:47:16 · 1159 阅读 · 0 评论 -
28.特性trait.rs
/*特性(trait)概念接近于 Java 中的接口(Interface),但两者不完全相同。特性与接口相同的地方在于它们都是一种行为规范,可以用于标识哪些类有哪些方法trait Descriptive { fn describe(&self) -> String;}Descriptive 规定了实现者必须有是 describe(&self) -> String 方法。(必须实现所有方法)几个非常有用的标准库特性: Drop提供了当一个值退出作用域后执行代.原创 2021-03-08 12:43:54 · 235 阅读 · 0 评论 -
27.泛型generics.rs
/*fn max(array: &[i32]) -> i32 { let mut max_index = 0; let mut i = 1; while i < array.len() { if array[i] > array[max_index] { max_index = i; } i += 1; } array[max_index].原创 2021-03-08 12:43:19 · 190 阅读 · 1 评论 -
26.PhantomData幽灵数据.rs
/*它在标准库中的定义如下:#[lang = "phantom_data"]#[stable(feature = "rust1", since = "1.0.0")]pub struct PhantomData<T: ?Sized>;可以到它只是一个不占用任何空间的单元结构体,#[lang = "phantom_data"], 也表明了它是一个语言项,供 Rust 编译器本身使用。https://blog.csdn.net/wowotuo/article/details/931.原创 2021-03-08 12:42:42 · 633 阅读 · 0 评论 -
25.智能指针.rs
/*参考文章:https://zhuanlan.zhihu.com/p/112307245https://rustcc.cn/article?id=76e5f3fb-20b9-48c9-8fc6-a0aad40ced8chttps://www.codercto.com/a/27950.htmlhttps://www.twle.cn/c/yufei/rust/rust-basic-smart-pointers.htmlhttps://www.cnblogs.com/dream397/p/1418.原创 2021-03-08 12:42:05 · 190 阅读 · 0 评论 -
24.内存操作Copy-Move-Clone.rs
/*详细请看:https://zhuanlan.zhihu.com/p/21730929https://zhuanlan.zhihu.com/p/184907190Clone VS Copy VS Move首先看一下这个两个trait的关系:pub trait Sized { // Empty.}pub trait Clone: Sized { fn clone(&self) -> Self; fn clone_from(&mut self,.原创 2021-03-08 12:41:28 · 394 阅读 · 0 评论 -
23.所有权.rs
/* 所有权1.Rust 中的每个值都有一个变量,称为其所有者。2.一次只能有一个所有者。3.当所有者不在程序运行范围时,该值将被删除。变量与数据交互方式主要有移动(Move)和克隆(Clone)两种。可以引用租借*/fn main() { { // 在声明以前,变量 s 无效 let _s = "runoob"; // 这里是变量 s 的可用范围 } // 变量范围已经结束,变量 s 无效 test1.原创 2021-03-08 12:40:49 · 225 阅读 · 0 评论 -
22.循环控制.rs
fn main() { //while 循环 let mut number = 1; while number != 4 { println!("{}", number); number += 1; } //Rust 语言到此教程编撰之日还没有 do-while 的用法,但是 do 被规定为保留字,也许以后的版本中会用到。 // Rust 中没有for循环使用三元语句控制循环,需要用 while 循环来代替 /.原创 2021-03-08 12:40:18 · 153 阅读 · 0 评论 -
21.println输出打印.rs
fn main() { let a = 12; println!("a is {0}, a again is {0}", a); println!("{{}}"); }原创 2021-03-08 12:39:44 · 211 阅读 · 0 评论 -
20.if条件语句.rs
fn main() { // if else let number = 7; if number < 5 { println!("值小于5"); } else if number >5 { println!("值大于5"); } else { println!("值为5"); } //Rust 中的条件表达式必须是 bool 类型,例如下面的程序是错误的 /...原创 2021-03-08 12:38:50 · 254 阅读 · 0 评论 -
19.函数的使用.rs
fn main() { another_function(5, 6); println!("{}",test_return()); println!("{}",test_return2());}// Rust不在乎您在何处定义函数,只需在某个地方定义它们即可。// Rust 中定义函数如果需要具备参数必须声明参数名称和类型:fn another_function(x: i32, y: i32) { println!("x 的值为 : {}", x); ...原创 2021-03-08 12:38:16 · 352 阅读 · 0 评论 -
18.self关键字.rs
#[derive(Debug)]struct MyType { name: String}impl MyType { fn do_something(self, age: u32) { //等价于 fn do_something(self: Self, age: u32) { //等价于 fn do_something(self: MyType, age: u32) { println!("name = {}", self.name); .原创 2021-03-05 11:31:19 · 162 阅读 · 0 评论 -
17.默认值Default.rs
fn test_1() { //没有初始化会编译报错.use of possibly-uninitialized `i` let i: i8 = Default::default(); let (x, y): (Option<String>, f64) = Default::default(); let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default(); println!("{}.原创 2021-03-05 11:30:05 · 419 阅读 · 0 评论 -
16.枚举中的option和result.rs
fn test_option() { //Option 是 Rust 标准库中的枚举类,这个类用于填补 Rust 不支持 null 引用的空白 /* enum Option<T> { Some(T), None, } */ let opt = Option::Some("Option_Some_str"); match opt { Option::Some(s.原创 2021-03-05 11:28:21 · 369 阅读 · 1 评论 -
15.枚举enum.rs
//枚举类在 Rust 中并不像其他编程语言中的概念那样简单,但依然可以十分简单的使用#[derive(Debug)]enum Book { Papery, Electronic,}//如果你现在正在开发一个图书管理系统,你需要描述两种书的不同属性(纸质书有索书号,电子书只有 URL),你可以为枚举类成员添加元组属性描述enum Book2 { Papery(u32), Electronic(String),}//如果你想为属性命名,可以用结构体语法e.原创 2021-03-05 11:27:36 · 157 阅读 · 0 评论 -
14.结构体struct.rs
//Rust 里 struct 语句仅用来定义,不能声明实例,结尾不需要 ; 符号,而且每个字段定义之后用 , 分隔#[derive(Debug)]struct Site { domain: String, name: String, nation: String, found: u32}fn main() { let runoob = Site { domain: String::from("www.runoob.com"), .原创 2021-03-05 11:24:57 · 231 阅读 · 0 评论 -
13.迭代器.rs
/*在Rust中,迭代器共分为三个部分:迭代器、适配器、消费者。_迭代器_给你一个值的序列_适配器_操作迭代器,产生一个不同输出序列的新迭代器_消费者_操作迭代器,产生最终值的集合迭代器本身提供了一个惰性的序列,适配器对这个序列进行诸如筛选、拼接、转换查找等操作,消费者则在前两者的基础上生成最后的数值集合更多请看https://blog.csdn.net/guiqulaxi920/article/details/78823541*/use std::collections::Has.原创 2021-03-05 11:23:31 · 154 阅读 · 0 评论 -
12.映射表map.rs
/* 映射表*/use std::collections::HashMap;fn test_1() { println!("-------------------------test_1-------------------------"); let mut map = HashMap::new(); //这里没有声明散列表的泛型,是因为 Rust 的自动判断类型机制。 map.insert("color", "red"); map.insert("size",.原创 2021-03-05 11:20:41 · 175 阅读 · 0 评论 -
11.向量vector.rs
/*向量(Vector)是一个存放多值的单数据结构,该结构将相同类型的值线性的存放在内存中。向量是线性表,在 Rust 中的表示是 Vec<T>。向量的使用方式类似于列表(List),我们可以通过这种方式创建指定类型的向量:*/fn test_1() { let vector: Vec<i32> = Vec::new(); // 创建类型为 i32 的空向量 let vector = vec![1, 2, 4, 8]; // 通过数组创建向量 .原创 2021-03-05 11:20:09 · 205 阅读 · 0 评论 -
10.切片slice.rs
//切片(Slice)是对数据值的部分引用。//..y 等价于 0..y//x.. 等价于位置 x 到数据结束//.. 等价于位置 0 到结束fn main() { //最简单、最常用的数据切片类型是字符串切片(String Slice)。 let s = String::from("broadcast"); let len = s.len(); let part1 = &s[0..5]; let part2 = &s[5..len];.原创 2021-03-05 11:19:37 · 211 阅读 · 0 评论 -
9.整型安全操作.rs
fn main() { //值得注意的是他们返回的都是Option类型 let t = 0x12345678u32.checked_mul(15); println!("{:?}",0x12345678u32.checked_mul(15));//乘法 println!("{:?}",0x12345678u32.checked_add(15));//加法操作 println!("{:?}",100u32.checked_div(1)); println!.原创 2021-03-04 11:37:57 · 152 阅读 · 1 评论 -
8.元组tup.rs
//元组用一对 ( ) 包括的一组数据,可以包含不同种类的数据fn main() { let tup:(i32,f64,&str) = (123,0.456,"abcd"); println!("{}-{}-{}",tup.0,tup.1,tup.2); let (x,y,z) = tup; println!("{}-{}-{}",x,y,z);}原创 2021-03-04 11:37:21 · 165 阅读 · 1 评论 -
7.字符串.rs
/**/fn test_1() { //新建字符串: let string = String::new(); //字符串长度: let len = string.len(); //基础类型转换成字符串: let one = 1.to_string(); // 整数到字符串 let float = 1.3.to_string(); // 浮点数到字符串 let slice = "slice".to_string();.原创 2021-03-04 11:36:40 · 234 阅读 · 1 评论 -
6.变量的使用.rs
fn main() { let mut a = 123; // a = "abc"; 错误在于当声明 a 是 123 以后,a 就被确定为整型数字,不能把字符串类型的值赋给它。 // a = 4.56; 错误在于自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换。 //不带mut也可以改变值,变量的值可以"重新绑定" let b = 123; let b = 456; // 虽然 Rust 有自动判断类型的功能,但...原创 2021-03-04 11:35:53 · 192 阅读 · 1 评论 -
5.注释.rs
/////////////////////////////////////// 这种事第二类注释,用于说明本模块的功能。一般置于模块文件的头部。(好像必须放在头部)/////////////////////////////////////////! note: inner doc comments like this (starting with `//!` or `/*!`) can only appear before items//! # The Rust Standard Library/..原创 2021-03-04 11:35:10 · 207 阅读 · 1 评论 -
4.extern关键字.rs
/*在rust中有两种用法1.导入外部的包 extern crate mylib 。在最新的rust2018中已经可以不在声明2.extern "C" 目测和C语言完全一致每一个crate就是一个根模块。如:exp, lip, lip1, lip2, lip3。独立的一个文件就是一个mod,文件名就是mod名;但是main.rs, lib.rs, mod.rs除外,mod.rs的模块名就是其所在目录的名字; 而main.rs, lib.rs 的目录结构,如:exp/src/main.rs或 .原创 2021-03-04 11:34:20 · 1119 阅读 · 1 评论 -
3.type关键字.rs
/*你可以使用 type 关键字声明另一类型的别名(用法和C++一样一样的)类型别名:type aliasestype Name = String;type 也可以用来声明trait的关联类型,详细请看“特性trait”章节更多详细信息请看:https://github.com/rooat/RustLearn/blob/master/src/ch19-04-advanced-types.md*/fn test_1() { type Name = String; l.原创 2021-03-04 11:33:37 · 294 阅读 · 1 评论 -
2.static关键字.rs
/*Rust 全局变量(static): 1.定义如下 static NUM: i32 = 100; 2.全局变量和常量类似,但是一个重要的区别就是,全局变量不会被内联,在整个程序中,全局变量只有一个实例,也就是说所有的引用都会指向一个相同的地址。 3.定义全局变量使用关键字static,而定义常量使用const,定义普通变量使用let 4.和常量不同,全局变量可以定义为可变的(mut) 5.因为全局变量可变,就会出现被多个线程同时访问的情况,因而引发内存不安全..原创 2021-03-04 11:32:09 · 185 阅读 · 1 评论 -
1.const关键字.rs
/*定义常量与定义普通变量的区别: 1.关键字是const而不是let 2.常量声明时候必须指明类型,编译器不会进行自动推导 3.定义常量时变量的命名规则一般是全部大写(如NUM),非强制,但是会有warning。 4.常量可以在任意作用域进行定义,而定义的常量贯穿整个程序的生命周期。在编译的时候,编译器会尽 可能将其内联到代码中,所以在不同地方对同一常量的引用并不能保证引用到相同的内存地址。 5.常量的赋值只能是常量表达式/数学表达式,也就是说必须是.原创 2021-03-04 11:30:28 · 240 阅读 · 1 评论 -
Rustup 管理工具
Rustup 是一个命令行应用,能够下载并在不同版本的 Rust 工具链中进行切换 —— 如编译器 rustc 和标准库,该应用所支持的平台数量不少。事实上,rustc 本身就支持大约 56 个平台,而 rustup 实际上能够为其中14个平台管理编译器,为30个平台管理标准库。一般安装不会只安装rust编译器,而是下载rustup工具,它是rust的安装器(安装编译器、标准库、Cargo等)和rust的版本管理工具(可切换rust版本)安装rustup:curl https://sh.rustup原创 2021-03-04 11:19:18 · 1408 阅读 · 1 评论 -
Rust学习资料大全
2021年接触了区块链,接触了波卡,接触了rust,接触了一个全新的世界,愿自己可以有一个好的发展,加油!!!rust语言是一门新兴起的编程语言,作为一个编程爱好者很想把他学精学透。但是一门编程语言没有个一年两载很难学精了,但是如果不进行总结就会进入到驴拉磨或者狗熊掰棒子的境地,所以稍稍做一些总结吧,但是大体上以后以学习区块链为主,以学习编程语言为辅,语言只是一门工具(小组长说的,想想还蛮有道理的)学习网站集合1.https://www.runoob.com/rust/rust-tutorial.h原创 2021-03-02 19:01:25 · 708 阅读 · 1 评论