Rust从入门到放弃(1)—— hello,world
安装及环境配置
- 特点:安全,性能,并发
- rust源配置
- RLS安装
- cargo
- rust管理工具,该工具可以愉快方便的管理rust工程
#!/bin/bash
mkdir learn
cd learn
cargo init ## 该命令会在当前目录下初始化一个
## 目录下会出现一个Cargo.toml文件,这是Cargo的配置文件
## 还有一个src目录,目录中包含一个main.rs的初始文件
cargo run ## 命令会编译并运行程序
cargo build ## 编译工程
- rust管理工具,该工具可以愉快方便的管理rust工程
变量与函数
函数定义 fn main(){}
fn main(){
let world = "world";
println!("hello, {}!", world);
}
//该例子中可以看出来,变量定义使用关键字 let,字符串格式化中的占位符采用 {}
- let 关键字用于引入一个变量
- 占位符 {},在Rust中比较通用,将变量转化为字符串,这里的变量可以是数值或者字符串。
- 返回值,
->
fn main() {
let x:i32;
let y:i32;
x = 10;
y = 5;
println!("x = {}, y = {}", x, y);
println!("add(x, y) = {}", add(x,y));
}
fn add(x:i32, y:i32) ->i32{
x+y
// return x+y;
}
变量声明
let val:i32 = 1
- 在rust中类型定义采用 var: type的形式
fn foo(_x :&'static str) -> &'static str{
"world"
}
fn main(){
println!("hello, {}!", foo("bar"));
}
静态字符串变量 &'static str
注意:在rust中,
str是关键字,不能用作变量名
let (x,y) = (5, 'a')
// 类型分别是i32,char
- 默认情况下,Rust中的一切都是不可变的,也就是说变量定义后不可改变其值,下面这段代码编译不会通过。
let x:i32 =10;
x = 6;
// ^^^^^ cannot assign twice to immutable variable
- 如果要改变变量,声明时需要加上
mut关键字
let mut x:i32 = 10
x = 6
字符串,Rust中存在两种字符串类型,str和String。
- &str: 字符串切片,固定大小的,不可变的UTF-8字节序列。
let x = "hello world!";
let y:&str = "hahahhahahah";
- String对象是可变的,可以用
String::from初始化该类型
let x = String::from(“Hello, World”);
let y: String = String::from(“Isn’t it a wonderful life?");
{
let mut s1 :&str = "s1 is &str";
let mut s2 :String = String::from("s2 is String");
println!("{}, {}", s1, s2);
// s1 is &str, s2 is String
s1 = "s1 is changed";
s2 = String::from("s2 is changed");
println!("{}, {}", s1, s2);
// s1 is changed, s2 is changed
}
- 数字
- i8 i16 i32 i64
- u8 u16 u32 u64
- isize usize
- f32,f64
- 数组
let x = [1, 2, 3];
let y: [i32; 3] = [4, 5, 6];
- 数组不常使用,rust中vector更为常见
let x = vec![1, 2, 3];
let y: Vec<i32> = [4, 5, 6];
- 元组
- 有序的、不可变的对象列表
let x = (5, 'A');
let y : (i32, char) = (12, 'c');
let v = x.0 // v == 5
let a = y.1 // a == 'c'
- 有序的、不可变的对象列表
Rust中的所有权
所有权
- Rust中,每个变量对绑定到它上的值有所有权。
- Rust中堆上的每个值都有一个所有者(变量)
- 当所有者超出作用域时,该值将被丢弃
// String的长度是可变的,分配在堆中,所以这里的会发生所有权移动。
// 在Rust中,这个过程称之为移动move,即原本x的值移动到了y上,x失效了。
fn main(){
let x = String::from("hello"); // x是"hello"
let y = x; // y是“hello”,这时x已经失效
println!("x is {}, f(x) is {}",x, y); // 会出错,因为x失效了。
}
借用
- 任何借用的有效期都不能超过原始所有者的作用域
- 任何时刻,都能够不可变的借用一个资源许多次
- 任何时刻,都能够可变的借用一个资源一次
方法&关联函数
impl作为实现结构体方法的关键字,方法的输入参数中第一个是self。调用采用.impl范围内,输入参数没有self的方法,即为关联函数。调用使用:- 关联函数经常被用作返回一个结构体新实例的构造函数。下面的例子中,Square即为Rect的关联函数。
- 每个Struct允许多个
impl块
// 定义一个结构体
struct Rect{
width: i32,
length: i32,
}
// 方法
impl Rect{
fn Area(&self) -> i32{
self.width * self.length
}
}
// 关联函数
impl Rect{
fn Square(w:i32) -> Rect{
Rect{width :w,
length: w,
}
}
}
Rust从入门到放弃(1)—— hello,world的更多相关文章
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- [精品书单] C#/.NET 学习之路——从入门到放弃
C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...
- OpenStack从入门到放弃
OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...
- 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃
一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...
- 《区块链:从入门到放弃》之obc安装步骤
obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...
- win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃
博主所在学校特别坑爹,校园网被电信一家垄断了,而且最恶心的还是电信要求一条网线只能供一台电脑上网,不许接路由器共享网络= =- (还有电信2M价格是380+每年,20m是500每年,而且网速都很慢= ...
- WPF从入门到放弃系列第二章 XAML
本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...
随机推荐
- Python中文件操作2——shutil模块
1 文件操作 文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开.读取以及写入,这三种操作是对文件基本的使用.文件还有复制.删除.移动.改变文件的属主属组等操作.下面主要看os模块和shut ...
- Android应用图标尺寸以及drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
应用图标: L DPI ( Low Density Screen,120 DPI ),其图标大小为 36 x 36 px M DPI ( Medium Density Screen, 160 DPI ...
- go-面向对象编程(上)
一个程序就是一个世界,有很多对象(变量) Golang 语言面向对象编程说明 1) Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对 象语言.所以我们说 ...
- LinuxShell脚本——选择结构
LinuxShell脚本——选择结构 摘要:本文主要学习了Shell脚本中的选择结构. if-else语句 基本语法 最简单的用法就是只使用if语句,它的语法格式为: if 条件 then 命令 fi ...
- HashMap、ConcurrentHashMap解析
一.HashMap分析 在JDK1.8之前,hashMap由数组+链表组成,1.8之后,对hashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组+链表+红黑树组成.查找时,根据hash ...
- 网站的favicon图标
网站的favicon图标 favicon.ico一般用于作为缩略的网站标志,它显示在浏览器的地址栏或者标签上. 制作favicon图标 把图片转换为png图片 把png图片转换为ico图标,这需要借助 ...
- Typescript基础(4)——接口
前言 今天继续typescript的学习,开始ts接口部分的学习. 接口 接口的理解 首先,我们谈论一下现实生活中的接口.比如生活中常用的插座接口,有些插头是三孔插座的,有些是两孔插座的.插座接口规定 ...
- 在linux上安装postgresql数据库
#postgres useradd postgres chown -R postgres:postgres /media su postgres mkdir -p /media/Data1/postg ...
- python 逐行读取txt文件
逐行读取txt文件 path = r'D:\123456\1.txt'with open(path, 'r', encoding='utf-8') as f: for line in f: ...
- https://jwt.io/一个可以解析token的神奇网站
网址:https://jwt.io/ 效果: