zoukankan      html  css  js  c++  java
  • 第一章 Rust基本知识 -- tour of rust

    第一章 基础知识

    将探讨函数、变量和最基本的类型等基本知识。 

    变量

    变量使用let关键字来声明。

    在赋值时,Rust能够在99%的情况下推断变量类型。如果不能,也可以将类型添加到变量声明中。

    注意 如果多次分配相同的变量名的方式,这被称为变量隐藏。可以更改变量类型以实现对该变量名的后续使用。

    变量名总是遵循蛇形命名法

    let x = 13;
    println!("{}", x);
      
    let x: f64 = 3.14159;
    println!("{}",x);
      
    let x;
    x = 0;
    println!("{}", x);

    修改变量

    Rust非常关心那些变量时可修改的,值分为两种类型:

    • 可变的 - 编译器允许对变量进行读取和写入

    • 不可变的- 编译器只允许对变量进行读取。

    可变值用mut 关键字表示

    1 let mut x = 42;
    2 println!("{}", x);
    3 x = 13;
    4 println!("{}", x);

    基本类型

    Rust有多种常见的类型:

    • 布尔类型-bool 表示true或false

    • 无符号整型- u8, u32, u64, u128表示正整数

    • 有符号整型- i8, i32, i64, i128表示正负整数

    • 指针大小的整数- usize, isize 表示内存中内容的索引和大小

    • 浮点数- f32 f64

    • 元组 tuple - (value, value, ...) 用于在栈上传递固定序列的值

    • 数组- 在编译时已知的具有固定长度的相同元素的集合

    • 切片 slice 在运行时已知长度的相同元素的集合

    • Str (string slice) - 在运行时已知长度的文本

    可以通过将类型附加到数字的末尾来明确指定数字类型(13u32, 2u8)

     1 let x = 12;
     2 let a = 12u8;
     3 let b = 4.3;
     4 let c = 4.3f32;
     5 let bv = true;
     6 let t = (13, false);
     7 let sentence = "hello world!";
     8 println!("{} {} {} {} {} {} {} {}", 
     9       x, a, b, c, bv, t.0, t.1, sentence
    10 );

    基本类型转换

    as 关键字,Rust使数字类型转换非常容易

    let a = 13u8;
    let b = 7u32;
    let c = a as u32 + b;
    println!("{}", c);
      
    let t = true;
    println!("{}", t as u8);

    常量

    常量允许我们高效地指定一个在代码中会被多次使用的公共值。不会象变量一样在使用的时候会被复制值,常量会在编译期间直接用它们的值来替换文本标识符

    不同于变量,常量必须始终具有显式类型。

    常量名总是遵循全大写蛇形命名法。

    1 const PI: f32 = 3.14158;

    数组

    数组是所有相同类型数据元素的固定长度集合。

    一个数组的数据类型是[T; N], 其中T是元素的类型,N是编译时已知的固定长度。

    可以使用 [x]运算符检索单个元素,其中x是所需元素的usize索引。

    1 let nums: [i32; 3] = [1, 2, 3];
    2 println!("{:?}", nums);
    3 println!("{}", nums[1]);

    函数

    函数有0个或者多个参数。

    函数名总是遵循蛇形命名法。

    1 fn add(x: i32, y: i32) -> i32 {
    2   x + y
    3 }

    多个返回值

    函数可以通过元组来返回多个值。

    元组元素可以通过它们的索引来获取。

    1 fn swap(x: i23, y: i32) -> (i32, i32) {
    2   (y, x)
    3 }
    4 
    5 let result = swap(123, 321);
    6 println!("{} {}"m result.0, result.1);
  • 相关阅读:
    __ATTRIBUTE__ 你知多少?【转】
    mount源码分析 【转】
    linux下共享内存mmap和DMA(直接访问内存)的使用 【转】
    mmap DMA【转】
    内存映射MMAP和DMA【转】
    进度条,随机数---demo笔记【原创】
    Linux内核抢占与中断返回【转】
    内核随记(三)--同步(1)【转】
    内核随记(三)--同步(2)【转】
    理解Linux中断 (1)【转】
  • 原文地址:https://www.cnblogs.com/Davirain/p/13352726.html
Copyright © 2011-2022 走看看