rust编程语言三(代码片段)

Mr-老鬼 Mr-老鬼     2023-02-22     411

关键词:

Rust编程语言三

fn main() 
    // 所有权规则   变量作用域
    // 变量范围是变量的一个属性,其代表变量的可行域,默认从声明变量开始有效直到变量所在域结束。
    // 这里未创建 变量 s 此时 s 不可用
    let s = "abc"; // 这里创建了变量 s 此时 s 可以使用
                   // 这里 变量 s 是可用的
    println!(" s  = ", s);
    my_test_string();
    heap_test();
    move_clone_test();
    ownership_and_functions();
    return_value_and_scope();

// 这里  外面 变量 s 不可用
///
/// String 类型
///
fn my_test_string() 
    //let s = String::from("hello");// 不可变 string 变量
    let mut s = String::from("hello"); // 创建一个可变的string变量
    s.push_str(" word"); // push_str() 在字符串后追加字面值
    println!("my_test >>  s = ", s);


///
/// 内存分配
///
fn heap_test() 
    let num = 1; // 栈内存  创建变量并赋值时 变量有效
    let num2 = 1.1; // 栈内存  创建变量并赋值时 变量有效
    let str1 = "asd"; // 栈内存  创建变量并赋值时 变量有效
    let str2 = String::from("qwe"); // 堆内存  创建变量并赋值时 变量有效
    println!(
        " num = ,num2 = ,str1 = ,str2 = ",
        num, num2, str1, str2
    );

// 上面函数 中的变量全部失效 被自动回收
///
/// 变量的 移动 克隆
///
fn move_clone_test() 
    // 堆内存中的值无法复制只能移动  基本数据类型可以复制
    let a = String::from("abc"); // 创建变量 a 赋值 string 类型 字符串abc
    let b = a; // 将 变量 a 赋值给 b 实际是将变量a的值移动到b , 此时 变量a 失效
    println!("b = ", b);
    //println!("a = ", a); // 此处报错 a 被移动到b时a 失效了
    // clone 克隆
    let s1 = String::from("hello"); // 创建变量s1 赋值 string类型 字符串hello
    let s2 = s1.clone(); // 将 s1的值克隆给s2 此时是克隆所以 s1仍然存在且有效
    println!("s1 = , s2 = ", s1, s2); // 打印 s1 s2值


///
/// 所有权与函数
///
fn ownership_and_functions() 
    let s = String::from("hello"); // s 进入作用域 s 是string类型 存储在堆内存中不能被复制
    takes_ownership(s); // s 的值移动到函数里 ...
                        // ... 所以到这里不再有效
    let x = 5; // x 进入作用域
    makes_copy(x); // x 应该移动函数里,
                   // 但 i32 是 Copy 的,所以在后面可继续使用 x
 // 这里, x 先移出了作用域,然后是 s。但因为 s 的值已被移走,
  // 所以不会有特殊操作
///
/// 移动所有权
///
fn takes_ownership(some_string: String) 
    // some_string 进入作用域
    println!("", some_string);
 // 这里,some_string 移出作用域并调用 `drop` 方法。占用的内存被释放
///
/// 复制
///
fn makes_copy(some_integer: i32) 
    // some_integer 进入作用域
    println!("", some_integer);
 // 这里,some_integer 移出作用域。不会有特殊操作
///
/// 返回值与作用域
///
fn return_value_and_scope() 
    let s1 = gives_ownership(); // gives_ownership 将返回值
                                // 移给 s1

    let s2 = String::from("hello"); // s2 进入作用域

    let s3 = takes_and_gives_back(s2); // s2 被移动到
                                       // takes_and_gives_back 中,
                                       // 它也将返回值移给 s3
    println!("s3 = ", s3);
 // 这里, s3 移出作用域并被丢弃。s2 也移出作用域,但已被移走,
  // 所以什么也不会发生。s1 移出作用域并被丢弃

fn gives_ownership() -> String 
    // gives_ownership 将返回值移动给
    // 调用它的函数
    let some_string = String::from("hello"); // some_string 进入作用域.
    some_string // 返回 some_string 并移出给调用的函数


// takes_and_gives_back 将传入字符串并返回该值
fn takes_and_gives_back(a_string: String) -> String 
    // a_string 进入作用域
    a_string // 返回 a_string 并移出给调用的函数

输出

 s  = abc
my_test >>  s = hello word
 num = 1,num2 = 1.1,str1 = asd,str2 = qwe
b = abc
s1 = hello, s2 = hello
hello
5
s3 = hello

进程已结束,退出代码为 0


我是Mr-老鬼、QQ1156346325 。交流QQ群:620028786,647082990,772810035
————————————————版权声明——————————————————
本文版权所有~Mr-老鬼 ~转载请注明原文地址
免责声明:本文所有的教程仅限交流学习使用不得用于违法用途,造成的法律后果本人不承担责任。

rust为什么我建议你学一下rust|rust初探(代码片段)

...3.HelloWorld三、总结一、Rust的特点Rust是一种多范式、通用编程语言,旨在提高性能和安全性,尤其是安全并发性。Rust在语法上类似于C++,但可以通过使用借用检查器来验证引用来保证内存安全。Rust在没有垃圾收... 查看详情

一天一门编程语言rust语言程序设计极简教程(代码片段)

...答案。不少于3000字。细分到2级目录。介绍Rust是一种系统编程语言,由MozillaFoun 查看详情

rust为什么我建议你学一下rust|rust初探(代码片段)

...3.HelloWorld三、总结一、Rust的特点Rust是一种多范式、通用编程语言,旨在提高性能和安全性,尤其是安全并发性。Rust在语法上类似于C++,但可以通过使用借用检查器来验证引用来保证内存安全。Rust在没有垃圾收... 查看详情

rust编程语言入门(代码片段)

Rust编程语言入门Rust简介为什么要用Rust?Rust是一种令人兴奋的新编程语言,它可以让每个人编写可靠且高效的软件。它可以用来替换C/C++,Rust和他们具有同样的性能,但是很多常见的bug在编译时就可以被消灭。Rust是一种通用的... 查看详情

rust初识及rust的esapi(代码片段)

RustRust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。Rust致力... 查看详情

rust内存管理(代码片段)

Rust内存管理 Rust与其他编程语言相比,最大的亮点就是引入了一套在编译期间,通过静态分析的方式,确定所有对象的作用域与生命周期,从而可以精确的在某个对象不再被使用时,将其销毁,并且不引入任何运行时复杂度... 查看详情

深入浅出rust异步编程之tokio(代码片段)

深入浅出Rust异步编程之Tokio本文以tokio为例简单介绍Rust异步编程相关的一些知识。首先让我们看看为什么使用rust来进行异步编程。这里tokio官方给出了一个性能测试的对比,可以看到tokio是性能最好,实际上运行这个基准测试的... 查看详情

rust通用编程概念(代码片段)

...样是为了能够让你安全并且方便地写出复杂、甚至并行的代码。当一个变量是不可变时,一旦它绑定到了某个值上面,这个值就再也无法被改变了。1letx=5;m,2println!("Thevalueofxis:",x);3x=6;4//^cannotassigntwicetoimmutablevariable5prin 查看详情

rust编程语言入门之项目实例:-命令行程序(代码片段)

项目实例:-命令行程序一、实例:接收命令行参数本章内容12.1接收命令行参数12.2读取文件12.3重构:改进模块和错误处理12.4使用TDD(测试驱动开发)开发库功能12.5使用环境变量12.6将错误消息写入标准错误而不是标准输出创建... 查看详情

rust语言教程-数组与向量(代码片段)

Rust语言教程(3)-数组与向量上一节我们采摘了不少低矮的果实,将其它语言学到的知识迁移到Rust中来。这一节我们仍然继续采摘。在数据结构中,最经常使用的就是定长的数组和变长的向量。数组Rust的数组除了是把类型... 查看详情

rust编程语言入门之编写自动化测试(代码片段)

编写自动化测试一、编写和运行测试测试(函数)测试:函数验证非测试代码的功能是否和预期一致测试函数体(通常)执行的3个操作:准备数据/状态运行被测试的代码断言(Assert)结果解剖测试函数测试函数需要使用test属性... 查看详情

rust编程语言入门之rust的面向对象编程特性(代码片段)

...向对象编程特性一、面向对象语言的特性Rust是面向对象编程语言吗?Rust受到多种编程范式的影响,包括面向对象面向对象通常包含以下特性:命名对象、封装、继承对象包含数据和行为“设计模式四人帮”在《设计模型》中给... 查看详情

rust编程语言一(代码片段)

Rust编程语言一usestd::env;fnmain()println!("HelloWorld!\\nI'maRustacean!");println!("days",3);println!("0,thisis1.1,thisis0","Alice","Bob");println!("subjectverbobject",object="thelazydog",subject="thequickbrownfox",ver... 查看详情

rust编程语言二(代码片段)

Rust编程语言二fnmain()letnumber=3;//if条件语句ifnumber%4==0println!("numberisdivisibleby4");elseifnumber%3==0println!("numberisdivisibleby3");elseifnumber%2==0println!("numberisdivisibleby2");elseprintln!("numberisnotdivisibleby4,3,or2... 查看详情

rust编程指南02-进入rust语言世界(代码片段)

原文链接:https://wayto.rs/about-book.html 欢迎大家加入Rust编程学院,中国最好的Rust学习社区官网:https://college.rsQQ群:1009730433进入Rust编程世界一、Rust发展历程Rust最早是Mozilla雇员GraydonHoare的一个个人项目,从2009... 查看详情

rust学习教程-引用与借用(代码片段)

...所有权转移,会让程序变得复杂,那能否像其它编程语言一样,使用某个变量的指针或者引用呢?答案是有的。Rust通过借用(Borrowing) 查看详情

rust运行时指南(官方文档翻译)(代码片段)

...Runtime已经不存在了。特此声明,以免误导读者。 Rust编程语言的标准发行版包含两个运行时库(libgreen和libnative),提供I/O等基础设施的统一接口。但对Rust语言本身而言,运行时(runtime)并不是必需的;Rust编译器可以生成... 查看详情

rust语言编写wasm简单例子(代码片段)

...装wasm-packcargoinstallwasm-pack--no-default-features#忽略OpenSSL实例代码externcratewasm_ 查看详情