Skip to content

Latest commit

 

History

History
282 lines (140 loc) · 3.68 KB

Day1.1(2020-05-22).md

File metadata and controls

282 lines (140 loc) · 3.68 KB

Day 1(2020-05-22)

目标:完成rustlings所有练习并记录下关键语法。

1、变量声明关键字:

let x=10;

2、声明数据类型(let x :数据类型)

let x :u32=10;

3、if语句(不加括号)

if 表达式

{

 

}

else

{

 

}

4、输出({}类似于C++中的”%d”等)

println!(“the value is {},x);//自动换行,如果不换行使用print!。

5、可更新数值的变量的定义(加入关键字mut,不加入的话默认为不可变更):

let mut x=3;

6、rust可以重复定义变量使得之前定义的变量被隐藏

fn main() {

  let mut number = "3";

  println!("Number {}", number);

  let  number = 3;

  println!("Number {}", number);

}

7、函数参数(fn function(x: 参数类型)

fn main() {

  call_me(3);

}

 

fn call_me(num: u32) {

  for i in 0..num {println!("Ring! Call number {}", i + 1);

  }

}

8、循环语句for i in lo..hi(具体代码参考7)

9、带返回值的函数 fn function(参数) -> 返回值类型(返回值可以直接写单独的返回变量【但是不能加分号变成语句】,也可以加return)

fn main() {

  let original_price = 51;

  println!("Your sale price is {}", sale_price(original_price));

}

 

fn sale_price(price: i32) ->i32 {

  if is_even(price) {

​    price - 10

  } else {

​    price - 3

  }

}

 

fn is_even(num: i32) -> bool {

  num % 2 == 0

}

此处第一次出现了问题:sale_price()的返回值我开始设置的是u32,但是它却报错了,说明rust并没有C语言那样能够自动进行数据类型转换的功能。

10、字符型变量的接口(判断是否为数字或者字母)

let my_first_initial = 'C';

  if my_first_initial.is_alphabetic() {println!("Alphabetical!");

  } else if my_first_initial.is_numeric() {println!("Numerical!");

  } 

11、数组

Rust数组的声明方式为let a:[type;size],而且必须给元素初始化,一个简单初始化的方式为

 let a: [type; size]=[default;size];

 fn main() {

  let a: [i32; 100]=[0;100];

 

  if a.len() >= 100 {println!("Wow, that's a big array!");

  } else {println!("Meh, I eat arrays like that for breakfast.");

  }

}

12、截取数组元素

  let a = [1, 2, 3, 4, 5];

 

  let nice_slice = &a[1..4];

13、tuple类型:(访问tuple中的元素为tuple.index【此处index与数组访问类似】)

元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。

 fn main() {

  let cat = ("Furry McFurson", 3.5);

  let (name,age)= cat;

 

  println!("{} is {} years old.", name, age);

}

fn main() {

  let numbers = (1, 2, 3);

  println!("The second number is {}", numbers.1);

}

14、classic_c struct

定义:

fn main() {

struct User {

  username: String,

  email: String,

  sign_in_count: u64,

  active: bool,

}

}

初始化实例:

#![allow(unused_variables)]

fn main() {

struct User {

  username: String,

  email: String,

  sign_in_count: u64,

  active: bool,

}

 

let user1 = User {

  email: String::from("[email protected]"),

  username: String::from("someusername123"),

  active: true,

  sign_in_count: 1,

};

}

15、tuple结构体

struct strc(类型1,类型2....)

初始化:

strc S=(对应类型的数据)

调用:strc.0,strc.1..

16、字符串相关问题

形如“abc”默认为&’static &str型,转化为String 需要调用String::from()。\

String s2=s1之后,s1的引用就无效了。如果需要深度克隆,需要调用s2=s1.clone()