《The Rust Programming Language》的Rust 学习2

第三章Common Programming Concepts

Variables and Mutability

variables

变量 默认immutable 不能更改值 要改为mutable才能更改

let y = 5
y =  7  //会产生编译报错
//正确的方法
let mut y = 6
y = 7

because it makes the code more convenient to write than if it had only immutable variables.

Constants

一直保持 immutable的状态
并且定义的时候要声明变量类型

Shadowing

可以对同一个变量多次赋值,要用上let关键字,后面的值会替代前面的值。

fn main() {
    let x = 5;

    let x = x + 1;    \\x = 6

    let x = x * 2;    \\ x = 12

    println!("The value of x is: {}", x);
}
  1. 与直接用mut不同,多次let后最终值仍然是immutable状态。
  2. shadowing可以使得变量用相同名称,但用不同的类型

Data Types

编译时必须有类型

Scalar 标量类型

int、float、bool、char 四种类型
int的默认类型是i32

int溢出说明
编译过程中:
debug模式,Rust会协助检查
release模式,Rust 会二进制补码

float默认是f64
bool 占1 bit
char 用单引号’ ’ (而String用双引号 " " ) 占4bit

Compound 复合类型

tuple 元组

元组 是一系列不同数据类型的组合
一旦确定,大小不能改变

let tup: (i32, f64, u8) = (500, 6.4, 1);
 let (x, y, z) = tup; //解构

let (x, y, z) = tup 分别给x,y,z 赋值,这个过程被称为解构
也可以使用

let x = tup.0;

这种方式

数组

同样是固定长度
较特殊的一种表示

let a = [3; 5];

最终形成5个3组成的数组

Functions

采用用蛇形命名法:全部小写单词,中间连字符连接
参数定义必须有类型
statement(语句)和expression(表达式)区别

____
语句执行操作,没有返回值
表达式产生结果

Rust is an expression-based language

因此,函数返回值需要按照表达式返回

fn plus(x: i32,y:i32)-> i32{
x+y    //或  return x+y  或 return x+y ;
}

x = y = 6这样的表达式不能再Rust里出现,let x = (let y = 6)就会报错,因为let y = 6 是语句,并不会返回某种值。

Control Flow

ibm的一个说明还挺不错的

if

  1. if的条件必须是 bool类型变量,Rust没有变量转化机制
  2. if是表达式,因此可以用于赋值,但if,else的返回值类型要相同,如
let number = if condition { 5 } else { 6 };
// let number = if condition { 5 } else { "SIX" };   是错误的


loop

与 if类似,loop结果也可用于 let 赋值

let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

for

Rust采用以下风格

 for i in 1..10{
     println!("{}",i);
}

let x = [0, 1, 2, 3, 100];
 
for element in x.iter() {   // or use  &x
    println!("element: {}", element);
}

练习2

use std::io;

fn F(n :u32)->u32{
   if n == 1 || n == 2  {
      return 1;
   }else{
    F(n-1)+F(n-2)
    
   }
}


fn main() {
    
    let mut input = String::new();
    io::stdin()
       .read_line(&mut input)
       .expect("error");
    let n :u32 = input.trim().parse().expect("error");
    let mut n = 8;
    while n!=0 {
    let re = F(n);
    println!("{}",re);
    n -= 1;
}
    
}

另外一道题还挺有意思,不过之前没有听说过

print the lyrics to the Christmas carol “The Twelve Days of Christmas,” taking advantage of the repetition in the song.

网上大多是Java 实现的,我用Rust改写一下,单独列一篇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值