科技园区建设网站的意义个人网站名字

news/2025/10/5 18:40:26/文章来源:
科技园区建设网站的意义,个人网站名字,我也要投放广告,wap网站现在还有什么用【Rust】001-基础语法#xff1a;变量声明及数据类型 文章目录 【Rust】001-基础语法#xff1a;变量声明及数据类型一、概述1、学习起源2、依托课程 二、入门程序1、Hello World2、交互程序代码演示执行结果 3、继续上难度#xff1a;访问链接并打印响应依赖代码执行命令 三…【Rust】001-基础语法变量声明及数据类型 文章目录 【Rust】001-基础语法变量声明及数据类型一、概述1、学习起源2、依托课程 二、入门程序1、Hello World2、交互程序代码演示执行结果 3、继续上难度访问链接并打印响应依赖代码执行命令 三、数据类型1、标量类型整型标量类型其它 2、复合类型 四、变量声明与使用1、常量代码演示执行结果 2、变量代码演示执行结果 3、变量名复用代码演示执行结果 4、声明时指定变量类型代码演示执行结果 5、元组的使用代码演示执行结果 6、数组的使用代码演示执行结果 7、字符串代码演示执行结果 五、演示 Ownership所有权、Borrowing借用 和 Lifetime生命周期 的基本概念的示例代码演示执行结果 六、const 和 let 的区别1. 可变性Mutability2. 类型注解3. 初始化表达式4. 作用域和生命周期5. 内联 一、概述 1、学习起源 “一切能用 Rust 重写的项目都将或者正在用 Rust 重写” 2、依托课程 Rust 入门与实践https://juejin.cn/book/7269676791348854839?utm_sourcecourse_list 二、入门程序 1、Hello World fn main() {// 打印字符串println!(Hello, world!); }2、交互程序 代码演示 use std::io; // 使用标准库中的 io 这个模块fn main() {// 打印字符串println!(Hello, world!);// 打印字符串println!(请输入一个数字: );// 在这里我们创建了一个新的 String用来接收下面的输入let mut input String::new();io::stdin().read_line(mut input) // 读取一行.expect(Failed to read input!); // 比较粗暴的错误处理// 打印输入的原始内容println!(Your raw input is: {:?}., input);// trim 把前后的空格、换行符这些空白字符都去掉parse 将输入的字符串解析为 i64 类型如果解析失败就报错let number: i64 input.trim().parse().expect(Input is not a number!);// 打印 parse 之后的 i64 数字println!(Your input is: {}., number); }执行结果 C:/Users/Administrator/.cargo/bin/cargo.exe run --coloralways --package hello_rust --bin hello_rustFinished dev [unoptimized debuginfo] target(s) in 0.01sRunning target\debug\hello_rust.exe Hello, world! 请输入一个数字: 100 Your raw input is: 100\n. Your input is: 100.进程已结束退出代码为 03、继续上难度访问链接并打印响应 依赖 Cargo.toxml [package] name hello_rust version 0.1.0 edition 2021[dependencies] clap { version 4, features [derive] } reqwest { version 0.11, features [blocking] } 代码 // 使用 use 引入一个标准库的包或者第三方的包 use std::error::Error;// clap 是一个 Rust 社区开发的命令行参数解析库 use clap::Parser;// reqwest 是一个 Rust 社区开发的 HTTP 客户端库 use reqwest::blocking::Client; use reqwest::header::HeaderMap;// 使用 derive 宏用于自动生成 Parser 的实现 // 在高级特性章节中我们会学到宏的用法及原理 #[derive(Parser)] #[command( author, version, about Sends HTTP requests and prints detailed information )] struct Cli {// arg 宏用于标记命令行参数这里标记了一个必须的 URL 参数#[arg(short, long, help Target URL, required true)]url: String, }/// Rust 程序入口 fn main() - Result(), Boxdyn Error {// 解析命令行参数let cli Cli::parse();// 发起 HTTP 请求// ? 是 Rust 中的错误传播语法糖我们会在接下来的章节中学习let response send_request(cli.url)?;// 打印 HTTP 响应的详细信息print_response_details(response)?;Ok(()) }/// 发起一个 HTTP 请求 /// 参数是目标 URL 的引用 /// 返回值是一个 Result如果请求成功返回 Response否则返回一个动态 Error fn send_request(url: str) - Resultreqwest::blocking::Response, Boxdyn Error {// 创建一个 HTTP 客户端let client Client::builder().build()?;// 使用 GET 方法发起请求let response client.get(url).send()?;Ok(response) }/// 打印出 HTTP 响应的详细信息 /// 参数是 Response 对象 /// 返回值是一个 Result用于错误处理 fn print_response_details(response: reqwest::blocking::Response) - Result(), Boxdyn Error {// 打印 HTTP 状态码println!(Status: {}, response.status());// 打印 HTTP 响应头println!(Headers:);print_headers(response.headers());// 读取并打印 HTTP 响应体let body response.text()?;println!(Body:\n{}, body);Ok(()) }/// 打印出 HTTP 响应头 /// 参数是 HeaderMap 的引用 fn print_headers(headers: HeaderMap) {for (key, value) in headers.iter() {// 打印每个响应头的键和值// 如果值不是 UTF-8 字符串就打印 [unprintable]println!( {}: {}, key, value.to_str().unwrap_or([unprintable]));} }执行命令 根目录执行 cargo run -- --url https://juejin.cn/三、数据类型 1、标量类型 整型标量类型 只要记得最低从 8 开始到 128 结束当然正常情况下我们最多用到 64128 在很多平台上需要软件模拟而不是硬件支持不推荐大家用在赋值的时候除了直接十进制数字赋值外还支持以下语法大家了解一下就好不用死记硬背 其它 浮点数f32 / f64boolchar这个比较特殊Rust 中一个 char 占 4 字节存放的是一个 UTF-32而不像 C/C 那样本质上是个 u8 2、复合类型 元组 tuplelet a (1, 2); let (a, b) (1, 2)数组 array: let a [1, 2, 3]; let a [0; 5] // 这个声明中 0 是默认值5 是长度等价于 let a [0, 0, 0, 0, 0] 四、变量声明与使用 1、常量 代码演示 fn main() {// 声明常量表示年龄const AGE: u32 18;// 声明常量表示名字let name 张三;// 打印名字和年龄println!({}的年龄是{}, name, AGE); }执行结果 张三的年龄是182、变量 代码演示 fn main() {// 声明变量表示年龄let mut age 18;// 打印变量println!(age {}, age);// 修改变量age 20;// 打印变量println!(age {}, age); }执行结果 age 18 age 203、变量名复用 代码演示 fn main() {// 声明常量表示年龄let age 18;// 打印年龄println!(age {}, age);// 再次声明 age 变量此时不会报错let age 20;// 打印年龄println!(age {}, age); }执行结果 age 18 age 204、声明时指定变量类型 代码演示 fn main() {// 声明常量表示年龄let age: i32 18;// 打印年龄println!(age {}, age); }执行结果 age 18 age 205、元组的使用 代码演示 fn main() {// 声明一个包含三个元素的元组let my_tuple (1, hello, 3.14);// 使用索引访问元组中的元素println!(第一个元素是{}, my_tuple.0); // 输出 第一个元素是1println!(第二个元素是{}, my_tuple.1); // 输出 第二个元素是helloprintln!(第三个元素是{}, my_tuple.2); // 输出 第三个元素是3.14// 使用模式匹配解构元组let (x, y, z) my_tuple;println!(解构后 x 的值是{}, x); // 输出 解构后 x 的值是1println!(解构后 y 的值是{}, y); // 输出 解构后 y 的值是helloprintln!(解构后 z 的值是{}, z); // 输出 解构后 z 的值是3.14// 忽略元组中不需要的值let (a, _, _) my_tuple;println!(只需要第一个元素{}, a); // 输出 只需要第一个元素1// 嵌套元组let nested_tuple (1, (2, 3), 4);let (_, (b, c), _) nested_tuple;println!(嵌套元组中 b 的值和 c 的值分别是{} 和 {}, b, c); // 输出 嵌套元组中 b 的值和 c 的值分别是2 和 3 }执行结果 第一个元素是1 第二个元素是hello 第三个元素是3.14 解构后 x 的值是1 解构后 y 的值是hello 解构后 z 的值是3.14 只需要第一个元素1 嵌套元组中 b 的值和 c 的值分别是2 和 36、数组的使用 代码演示 fn main() {// 声明一个包含5个元素的整数数组let int_array [1, 2, 3, 4, 5];// 声明一个包含5个元素的浮点数数组同时指定类型let float_array: [f64; 5] [1.0, 2.0, 3.0, 4.0, 5.0];// 使用索引访问数组中的元素println!(整数数组的第一个元素是{}, int_array[0]); // 输出 整数数组的第一个元素是1println!(浮点数数组的第二个元素是{}, float_array[1]); // 输出 浮点数数组的第二个元素是2.0// 使用循环遍历整数数组println!(整数数组的所有元素);for num in int_array.iter() {print!({} , num); // 输出 1 2 3 4 5 }println!();// 使用循环遍历浮点数数组并获取索引println!(浮点数数组的所有元素和对应的索引);for (index, num) in float_array.iter().enumerate() {println!(索引{}, 元素{}, index, num);// 输出 索引0, 元素1.0// 输出 索引1, 元素2.0// ...}// 声明一个全部元素为0的数组let zero_array: [i32; 5] [0; 5];println!(全为0的数组{:?}, zero_array); // 输出 全为0的数组[0, 0, 0, 0, 0] }执行结果 整数数组的第一个元素是1 浮点数数组的第二个元素是2 整数数组的所有元素 1 2 3 4 5 浮点数数组的所有元素和对应的索引 索引0, 元素1 索引1, 元素2 索引2, 元素3 索引3, 元素4 索引4, 元素5 全为0的数组[0, 0, 0, 0, 0]7、字符串 代码演示 fn main() {// 使用字符串字面量声明一个不可变字符串let hello_str Hello, world!;println!(不可变字符串字面量{}, hello_str); // 输出 不可变字符串字面量Hello, world!// 使用 String::from 创建一个可变字符串let mut hello_string String::from(Hello);println!(可变字符串{}, hello_string); // 输出 可变字符串Hello// 在可变字符串后追加字符串hello_string.push_str(, world!);println!(追加后的可变字符串{}, hello_string); // 输出 追加后的可变字符串Hello, world!// 字符串拼接let concat_str [hello_str, , hello_string].concat();println!(拼接后的字符串{}, concat_str); // 输出 拼接后的字符串Hello, world! Hello, world!// 使用索引获取字符串中的字符注意这种方式不推荐因为会导致错误或崩溃// let first_char hello_str[0]; // 这样是错误的// Rust 的字符串是 UTF-8 编码的直接索引可能会导致字符被截断。// 使用 chars 方法遍历字符串中的字符println!(使用 chars 方法遍历字符串);for ch in hello_str.chars() {print!({} , ch); // 输出 H e l l o , w o r l d ! }println!();// 使用 bytes 方法遍历字符串中的字节println!(使用 bytes 方法遍历字符串字节);for byte in hello_str.bytes() {print!({} , byte); // 输出对应的 ASCII 或 UTF-8 编码的字节值}println!();// 获取字符串长度println!(字符串 {} 的长度是{}, hello_str, hello_str.len()); // 输出 字符串 Hello, world! 的长度是13 }执行结果 不可变字符串字面量Hello, world! 可变字符串Hello 追加后的可变字符串Hello, world! 拼接后的字符串Hello, world! Hello, world! 使用 chars 方法遍历字符串 H e l l o , w o r l d ! 使用 bytes 方法遍历字符串字节 72 101 108 108 111 44 32 119 111 114 108 100 33 字符串 Hello, world! 的长度是13五、演示 Ownership所有权、Borrowing借用 和 Lifetime生命周期 的基本概念的示例 代码演示 // 定义一个函数演示所有权的转移 fn takes_ownership(some_string: String) {println!(函数内部{}, some_string); } // 这里 some_string 离开作用域所有权也随之释放// 定义一个函数演示借用不可变 fn borrows_immutable(s: String) {println!(函数内部不可变借用{}, s); }// 定义一个函数演示借用可变 fn borrows_mutable(s: mut String) {s.push_str(, world!); // 修改字符串println!(函数内部可变借用{}, s); }// 定义一个函数演示生命周期 // 注a 是生命周期标注表明 x 和 y 的生命周期相同并且与返回值的生命周期也相同 fn longesta(x: a str, y: a str) - a str {if x.len() y.len() {x} else {y} }fn main() {// 所有权Ownershiplet s1 String::from(hello); // s1 获取了字符串 hello 的所有权takes_ownership(s1); // 所有权转移到函数 takes_ownership// println!(main 函数{}, s1); // 错误因为 s1 的所有权已经被转移// 借用Borrowinglet s2 String::from(hello); // s2 获取了字符串 hello 的所有权borrows_immutable(s2); // 不可变借用所有权仍在 s2println!(main 函数不可变借用后{}, s2);let mut s3 String::from(hello); // s3 获取了字符串 hello 的所有权并且是可变的borrows_mutable(mut s3); // 可变借用所有权仍在 s3但内容已经被修改println!(main 函数可变借用后{}, s3);// 生命周期Lifetimelet str1 Rust;let str2 Programming;let result longest(str1, str2);println!(更长的字符串是{}, result); // 输出 更长的字符串是Programming }执行结果 函数内部hello 函数内部不可变借用hello main 函数不可变借用后hello 函数内部可变借用hello, world! main 函数可变借用后hello, world! 更长的字符串是Programming六、const 和 let 的区别 1. 可变性Mutability let: 默认情况下使用 let 声明的变量是不可变的但您可以使用 mut 关键字来使其可变。 let x 5; // 不可变 let mut y 6; // 可变const: 使用 const 声明的常量始终是不可变的并且不能使用 mut。 const X: i32 5; // 始终不可变2. 类型注解 let: 可以选择是否添加类型注解。 let x 5; // 类型推断为 i32 let y: i64 6; // 显示类型注解const: 必须添加类型注解。 const X: i32 5; // 必须提供类型3. 初始化表达式 let: 可以使用任何类型的表达式进行初始化。 let x 5 5; // 算术表达式const: 只能使用常量表达式进行初始化。 const X: i32 5 5; // 常量表达式但不能是函数调用、运行时计算等4. 作用域和生命周期 let: 局部变量作用范围仅限于声明它的代码块。const: 可以在模块级别使用生命周期可跨越整个程序。 5. 内联 const: 在编译时常量的值会被直接内联到使用它的表达式中。let: 取决于编译器优化。 总体来说const 主要用于那些在编译时就能确定并且永远不会改变的值而 let 则用于运行时可能会改变的值。希望这能帮助您更好地理解这两者之间的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设的常见技术有哪些怎么查询在建工程

useMemo和useCallback的用法以及区别 useCallback 和 useMemo 是 React 中的两个钩子函数,它们的目标都是优化性能,但它们在用途和使用场景上有一些区别。 useCallback useCallback 用于缓存一个回调函数,并在依赖项发生变化时&#xff0c…

深圳网站设计是什么简单网站搭建

1.认识二分查找 二分查找的时间复杂度:O(logN) 二分查找属于算法中耳熟能详的一类,通常的我们会说只有数组有序才可以使用二分查找,不过这种说法并不完全正确,只要数据具有"二段性"就可以使用二分查找,即我们可以找出一…

在wpf .net 8项目中使用materialDesign 4 以上版本的的注意事项

在wpf .net 8项目中使用materialDesign 4 以上版本的的注意事项新建.net8 wpf项目 nuget添加MaterialDesignThemes引用,现在可以用5.2.1,注意:可以只有添加这个包即可,因为新nuget会自动依赖引用MaterialDesignCol…

李臻20242817_安全文件传输系统项目报告_第14周 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一站多通怎么做网站饲料行业建设网站方案设计免费下载ppt

学习java之电脑的常用快捷键和DOS窗口下的常用命令电脑一些常用的快捷键win快捷键:单独按Windows:显示或隐藏 “开始”功能表WindowsBREAK:显示“系统属性” 对话框WindowsD:显示桌面或恢复桌面WindowsM:最小化所有窗口…

做网站套餐enjooy wordpress

本机文件夹同步到云服务器 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。本节操作介绍本地MacOS系统主机通过安装“Microsoft Rem…

长沙做网站 必看 磐石网络网店设计理念

随着我国人民精神文化与物质生活的不断升级,定制真人手办摆件的需求变得广泛,易模推出易模真人手办定制服务(小程序),帮助市场合作伙伴能够以全线上、手机端形式为用户制作真人手办,“全线上”的内涵包括手…

洛谷P14120 题解 - lemon

思维路径 容易注意到,这个赛制对于 BaoBao 非常不友好,因为 DreamGrid 可以通过他出的牌来决定自己的出牌。也就是说,我们不需要关注 BaoBao 的出牌顺序,只需要关注他出的每一张牌对应 DreamGrid 出的牌即可。 对于…

通州网站建设服务做网站建设销售

主要实现的那种光晕效果&#xff1a;中间亮&#xff0c;四周逐渐变淡的。 这边有三种发光效果&#xff0c;先上效果图。 第一种、圆形发光体 实现代码&#xff1a;新建shape_light.xml&#xff0c;导入以下代码。使用时&#xff0c;直接给view设置为background。 <?xml …

请网站制作公司费用网站制作与网站建设pdf

Navicat创建数据库表 、导入sql文件&#xff0c;生成表结构 1.打开Navicat2.远程连接mysql连接3.创建数据库4.导入sql文件5.生成表结构 1.打开Navicat 2.远程连接mysql连接 3.创建数据库 4.导入sql文件 导入源代码中的sql文件 5.生成表结构

33 ACwing 294 Count The Repetitions 题解

Count The Repetitions 题面 定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如: conn(“abc”,2)=”abcabc” 称字符串 a 能由字符串 b 生成,当且仅当 a 为 b 的子序列。 例如 abdbec 可以生成 abc,但是…

南沙做网站公司中国百强县市榜单

windows使用redis 安装和配置 下载安装方式一-使用压缩包安装解压到指定的文件Redis安装为Windows服务安装成功 方式二-MSI安装包安装完成 Redis配置远程访问1.修改配置文件redis.windows.conf2.修改完redis配置文件&#xff0c;必须重启redis 下载 先下载Redis for windows 的…

北京天通苑网站建设做网站公司报价

这是树的第10篇算法&#xff0c;力扣链接。 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], po…

电赛电装实习总结

电赛电装实习总结电赛最致命的问题是验收时仪器没有调好,可能是输入阻抗的问题,导致指标全部不对,最好还是拿自己做的时候用的仪器。 很多实验室仪器落灰,不常用的仪器大多是有问题的,用之前一定要矫正,没有验证…

量化投资 —— 实践 (续)

量化投资 —— 实践 (续)地址: https://item.taobao.com/item.htm?id=935049768542&pisk=gzwtYk13ZwbgtBLwXrfhnbarSWsHk6qZpPrWnq0MGyULcPgiocgXOXi-XmijcoijHyacbVqf7rexRAG4sq0ikxE4yMblETqabxkCraXu8SKU6Y…

30 ACwing 291 蒙德里安的梦想 题解

蒙德里安的梦想 题面 求把 \(N \times M\) 的棋盘分割成若干个 \(1 \times 2\) 的长方形,有多少种方案 例如当 \(N = 2, M = 4\) 时,共有 5 中方案。当 \(N = 2, M = 3\) 时,共有 3 种方案\(1 \le N, M \le 11\) 题…

21 ACwing 289 环路运输 题解

环路运输 题面 在一条环形公路旁均匀地分布着 N 座仓库,编号为 1∼N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 \(dist(i,j)=min(|i−j|,N−|i−j|)\),也就是逆时针或顺时针从 i 到 j 中较近的一种。 每座…

26 UVA1630 串折叠 Folding 题解

Folding 题面 折叠由大写字母组成的长度为 \(n\)(\(1\leqslant n\leqslant100\))的一个字符串,使得其成为一个尽量短的字符串,例如 AAAAAA 变成 6(A)。 这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYES…

网站结构和布局区别郑州网站推广平台

心路历程&#xff1a; 这道题是一个动态规划题&#xff0c;但是其实递推关系很难想到&#xff0c;如下图所示&#xff1a; MDP建模&#xff1a; 状态&#xff1a;以i,j为右下角的正方形 动作候选集&#xff1a;这道题的动作候选集其实是是否选择其左上角邻接的三个位置&#x…