关键词:
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_ 查看详情