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 ...
随机推荐
- 基础面试,为什么面试官总喜欢问String?
关于 Java String,这是面试的基础,但是还有很多童鞋不能说清楚,所以本文将简单而又透彻的说明一下那个让你迷惑的 String 在 Java 中,我们有两种方式创建一个字符串 String x ...
- EF-入门操作
EntityFramework Core 理解 DbContext :数据库 DbSet: 数据库表 Model : 数据行 IQueryable<Model> 查询结果集合 Lamada ...
- python bin文件处理
参考: https://blog.csdn.net/and_then111/article/details/86744938 https://blog.csdn.net/zw515370851/art ...
- Python 最强 IDE 详细使用指南!-PyCharm
PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...
- php 利用curl_*测试数据并发
工作时遇到一个数据并发问题,因为上线之前没有测试数据并发,导致有时候网络比较差的时候导致数据重复插入数据库 , 所以利用curl_*函数专门写了一个测试数据并发的测试用例,如下: function t ...
- C#与SAP系统的接口调用
Sap作为ERP的龙头企业,在企业信息化建设中是有目共睹的,特别是财务.人力.物流等发挥着极大作用,占领着半壁江山,所以与企业系统用SAP软件的接口对接很是普遍,简单介绍一下与SAP接口的一点点儿心得 ...
- JS基本语法---while循环
循环:一件事不停的或者是重复的做 循环要有结束的条件,循环还应该有计数器(记录循环的次数的) while循环 while循环语法: 计数器 var 变量=0; while(循环的条件){ ...
- weblogic 安装及配置
修改AdminServer为不需要输入密码的方式开启 : 安装使用的是production模式,不是开发模式,如果要后台启动Weblogic, 需要在如下DOMAIN_HOME/servers/Adm ...
- dos编码格式 cmd编码 dos中文显示
设置uft-8编码 > chcp 65001 设置默认编码 > chcp 936 字符集 1258 越南语 1257 波罗的语 1256 阿拉伯语 1255 希伯来语 1254 土耳其语 ...
- Android多module下重复jar包问题
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/166 Android多module下重复jar包问题 An ...