当前位置:   article > 正文

《The Rust Programming Language》的Rust 学习2_print the lyrics to the christmas carol “the twelv

print the lyrics to the christmas carol “the twelve days of christmas,” ta

第三章Common Programming Concepts

Variables and Mutability

variables

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

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  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; //解构
  • 1
  • 2

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

let x = tup.0;
  • 1

这种方式

数组

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

let a = [3; 5];
  • 1

最终形成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 ;
}
  • 1
  • 2
  • 3

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" };   是错误的


  • 1
  • 2
  • 3
  • 4

loop

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

let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

练习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;
}
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/702798
推荐阅读
相关标签
  

闽ICP备14008679号