当前位置: 首页 > news >正文

做外贸网站格式ppt 如何做网站交互式

做外贸网站格式,ppt 如何做网站交互式,毕业设计代做网站 知乎,齐装网装修公司前言#xff1a; 这是一个系列的学习笔记#xff0c;会将笔者学习Rust语言的心得记录。 当然#xff0c;这并非是流水账似的记录#xff0c;而是结合实际程序项目的记录#xff0c;如果你也对Rust感兴趣#xff0c;那么我们可以一起交流探讨#xff0c;使用Rust来构建程…前言 这是一个系列的学习笔记会将笔者学习Rust语言的心得记录。 当然这并非是流水账似的记录而是结合实际程序项目的记录如果你也对Rust感兴趣那么我们可以一起交流探讨使用Rust来构建程序。 注本文中使用Rust都是在windows环境下如果是macOS或者linux其指令或有不同请注意。 系列第一篇Rust学习日记一Cargo的使用 概述 这是Rust学习笔记的第二篇主要说一下Rust中的变量本文将结合两个实例来说明这两个实例分别是 1、在华氏度和摄氏度之间转换温度 2、生成指定个数n的斐波那契数列 如果你看过rust的官方手册那你会熟悉这两个例子事实上就是官方留的“课后习题” 在进入实例之前还是要先来简单看看变量的使用。 变量的申明 1、关键词let 在rust中申明变量的关键词就是let。如果你使用过其他语言那么你可能对rust的变量申明有疑问为什么用let 我觉得不用纠结这就是一个定义使用什么单词来作为关键词并不重要重要的是这个关键词的作用。 fn main() {let x5;println!(x is {x}); }上面的示例程序段是在主函数中创建了变量x并打印在终端输入cargo run输出如下 PS D:\008 rustpro\var cargo runFinished dev [unoptimized debuginfo] target(s) in 0.02sRunning target\debug\var.exe x is 52、变量的可变与不可变 变量顾名思义就是可变化的量不可变的是变量吗不可变的应该是常量吧 在rust中默认情况下变量是不可变的。 这是rust的设计它的目的当然是为了安全。“安全”是贯穿rust整个体系的后面会有更多更复杂更高级的功能都会和它有关。 fn main() {let x5;println!(x is {x});xx1;println!(x is {x}); }对前面的函数稍作修改给变量x再次赋值再看输出 PS D:\008 rustpro\var cargo runCompiling var v0.1.0 (D:\008 rustpro\var) error[E0384]: cannot assign twice to immutable variable x-- src\main.rs:4:5| 2 | let x5;| -| || first assignment to x| help: consider making this binding mutable: mut x 3 | println!(x is {x}); 4 | xx1;| ^^^^^ cannot assign twice to immutable variableFor more information about this error, try rustc --explain E0384. error: could not compile var (bin var) due to previous error错误提示cannot assign twice to immutable variable不能给“immutable variable”分配两次什么叫immutable variable就是不可变变量。 所以现在你就知道rust是比较奇葩的了。 但是这就是rust的设计如果你定义变量的时候只是简单的let x5那么这个x是不可变的。那如果要可变呢 let mut x5再加一个关键词mutmut其实就是mutable的简写可变的。 fn main() {let mut x5;println!(x is {x});xx1;println!(x is {x}); }cargo run PS D:\008 rustpro\var cargo runCompiling var v0.1.0 (D:\008 rustpro\var)Finished dev [unoptimized debuginfo] target(s) in 0.43sRunning target\debug\var.exe x is 5 x is 6可以发现“变量x”的值可以多次分配也就是真正的可变了。 看到这里你发现什么 你会发现在rust里你对一个对象比如变量的定义必须要十分清楚可变就可变不可变就不可变 这样一来rust编译器就能非常清楚地知道你定义这个变量的目的它会编译过程对你的意图全程跟踪 不可变变量如果不小心让它变化编译器就会报错提示你对你来说这就是安全。 你不用等程序都运行了然后偶尔崩溃了一次然后去找bug找来找去无论怎么编译就是没问题但一运行就报错这是令人崩溃的。 你已经了解到rust中变量的奇葩性了我们接着再看几个然后再进入实例。 3、常量 rust中常量用const来申明这个const应该是比较熟悉的单词了很多编程语言申明常量都是用它吧。 const也就是Constants的简写。 看一下申明的格式吧 const C_15如果你真的这么写cargo check一下会报错 PS D:\008 rustpro\var cargo checkChecking var v0.1.0 (D:\008 rustpro\var) error: missing type for const item-- src\main.rs:6:14| 6 | const C_15;| ^ help: provide a type for the constant: : i32error: could not compile var (bin var) due to previous errorrust编译器提示你需要给常量提供一个数据类型并且给了你一个选项i32。 rust中的数据类型----整数型 关于数据类型其实我认为不用多说照着手册看看了解一下即可因为一般来说对编程有所了解的对数据类型一般都不陌生可以说几乎所有语言中的数据类型都大同小异。 常见的比如说整数、浮点数、布尔量、字符串等还有一些复杂的比如结构体复合体、数组、列表、元组等。 我们接着说常量上面说这样写const C_15会报错原因是未给常量提供数据类型所以我们应该这么来申明常量 const C_1:i325rust就是这样它要求你明确哪怕是常量它不会为你隐式转换它要求你定义常量时明确常量的数据类型。 到此你会发现rust似乎很“麻烦”这也要明确那也要明确为什么不能像其他语言一样直接a5或者const a5 我只能说rust它就是这样一门语言如果你对此实在不能接受那么放弃是好的如果无所谓那么就按照rust的规则暂时先走下去。 4、变量的覆盖 我们在本文前面说过rust中的变量有可变和不可变的区别直接申明变量默认不可变如果要可变需加关键词mut。 但现在我们来看另一种使用 fn main() {let x5;println!(x is {x});let x:chara;println!(x is {x}); }我们在第一行定义x变量且赋值为5但没有用mut使其可变所以x是不可变的但是我们在第三行再次使用x变量而且给它赋值为字符‘a’。 我们先cargo run一下 PS D:\008 rustpro\var cargo runCompiling var v0.1.0 (D:\008 rustpro\var)Finished dev [unoptimized debuginfo] target(s) in 0.63sRunning target\debug\var.exe x is 5 x is a可以看到rust正常编译且结果x的值被改变了。你应该看到区别就是第三行再次使用x时重新定义了一次。 rust中用let来定义变量是可以重名的并且后一个可以覆盖前面的所谓“shadow”即旧的变量活在新的变量的阴影里。 你可能会觉得这样是不是会造成困扰如果不小心使用了一样的变量名覆盖之前的变量数据岂不是会影响程序。但这个问题容易解决只需要你在命名变量时有自己的规律即可但是rust中这样的机制会带来好处。 我们看到同样的变量x在第一次和第二次的定义中不仅值可以不同连数据类型也可以不同。 什么场景会这样使用比如你要输入一个值是字符类型但程序接收字符后要以整数型来运算但是这两个其实一个东西如果是其他语言你可能会这样定义变量x_str和x_int但是rust中你可以只定义一个x let x:chara; let x:i325;好了关于变量就先说到这基本上差不多了当然这并非是说把变量的所有方面都涉及到了只是说基本的概念都已经了解了。 下面将开始实例 一、温度转换 1、新建一个temp项目 PS D:\008 rustpro cargo new tempCreated binary (application) temp package PS D:\008 rustpro cd temp PS D:\008 rustpro\temp cargo buildCompiling temp v0.1.0 (D:\008 rustpro\temp)Finished dev [unoptimized debuginfo] target(s) in 0.49s PS D:\008 rustpro\temp 新建项目后rust会自动生成一个main.rs主函数。 这个主函数里默认的是打印“hello world”我们要修改它以达到温度转换的功能。 华氏度和摄氏度的转换关系如下 1 摄氏度33.8 华氏度 所以如果我们输入一个摄氏度值为x那么转换为华氏度应该是f(x)33.8*x 数学关系很清楚是很简单的一元一次函数。 先看一下main.rs的结构 fn main() {println!(Hello, world!); }fn和let一样是关键词定义函数所以fn后面的main就是函数只不过它是主函数所以地位特殊但是main这个名字想必大家也不陌生无论是C还是python都有主函数地位也差不多谁让它是main呢 但我们先不修改main我们先新建一个函数就叫temp_convert fn temp_convert(){}添加逻辑代码 fn temp_convert(t:f32)-f32{let t2t*33.8;return t2; }可以看到我们在新建的函数基础上添加了一个形式参数t把它的数据类型定义为f32即浮点数。 定义了一个函数返回值类型-f32即函数返回值也是f32类型。 然后在函数体内定义了变量t2其赋值为t*33.8, 最后将计算后的t2的值返回。 这个函数中形式参数t即输入的摄氏度返回的t2即转换的华氏度。 接下来就是在主程序里调用了 修改一下main函数 fn main() {let t1temp_convert(3.0);println!(t_f is {t1}); }因为函数temp_convert有返回值所以我们定义一个变量t1来储存它。 到此简单的温度转换就实现了只要给函数的参数赋予不同的值摄氏度函数就可以返回华氏度 PS D:\008 rustpro\temp cargo runCompiling temp v0.1.0 (D:\008 rustpro\temp)Finished dev [unoptimized debuginfo] target(s) in 0.42sRunning target\debug\temp.exe t_f is 101.399994但这样肯定不算是一个完整的程序我们设想应该是这样程序启动会输出一个文字提示让我们输入一个摄氏度我们输入后程序输出一个华氏度。然后能循环这样才算是完整的转换程序。 我们分两部分来说一是如何接受用户输入二是如何循环。 1 用户输入 用户输入需要用到IO接口在rust中即std::io。 std::io,这是一个程序包crate类似于其他程序的模块。在使用它之前需要先导入它。 use std::io;然后使用它 use std::io; fn main() {let mut t_inString::new();println!(请输入摄氏度值);io::stdin().read_line(mut t_in).expect(error);let t_in:f32t_in.trim().parse().expect(error);let t1temp_convert(t_in);println!(华氏度是 {t1}); }上面的主函数main变化较大我们一一来说一下。我们使用use关键词导入了std::io,这是用来接受用户输入的模块。 然后在主函数体内添加程序 let mut t_inString::new();这行是定义了一个可变变量t_in且类型为string。 io::stdin().read_line(mut t_in).expect(error);这行就是io接口的调用用于读取用户的输入read_line即是std::io模块的函数。mut t_in是将我们定义的变量t_in来接受read_line的输入值。 其实上面这行直接写如下 io::stdin().read_line(mut t_in).expect(error);之所以写成多行样式是为了便于阅读。 这里的expect是对潜在错误的处理关于错误的处理不在本文的范围后续会有专门叙述。此处只要知道这样用就可以了。 我们现在已经从用户处接受到输入值即t_in接下来要对输入值进行处理 let t_in:f32t_in.trim().parse().expect(error);此处我们使用前面介绍的变量覆盖先定义了t_in为用户输入且数据类型为string类型接着此行用同名变量t_in定义为f32类型覆盖之前的字符串类型。 其中的trim是消除一个字符串的开头和结尾的多余空格parse是将字符串转为另一种数据类型在此处就是转为f32类型。expect我们已经说过是对返回值的判断时可能发生的错误处理。 let t1temp_convert(t_in);在顺利获得用户输入的值且转为浮点类型后我们调用写好的temp_convert转换函数其形式参数t在调用时传入实际参数t_in。将temp_convert函数的返回值传给变量t1。 完整程序 use std::io; fn main() {let mut t_inString::new();println!(请输入摄氏度值);io::stdin().read_line(mut t_in).expect(error);let t_in:f32t_in.trim().parse().expect(error);let t1temp_convert(t_in);println!(华氏度是 {t1}); } fn temp_convert(t:f32)-f32{let t2t*33.8;return t2; } 在终端运行cargo run PS D:\008 rustpro\temp cargo runCompiling temp v0.1.0 (D:\008 rustpro\temp)Finished dev [unoptimized debuginfo] target(s) in 0.74sRunning target\debug\temp.exe 请输入摄氏度值 2 华氏度是 67.6好了第一部分完成了现在我们能成功根据输入的摄氏度转为华氏度且输出但缺点是每次运行只能进行一次所以需要循环。 循环 想让程序循环起来也很简单使用loop指令它会循环执行主程序的逻辑直到触发停止。本文中未添加明确的停止程序因为这不在我们的学习范围后续会有说明此文不赘述。 fn main() {loop{let mut t_inString::new();println!(请输入摄氏度值);io::stdin().read_line(mut t_in).expect(error);let t_in:f32t_in.trim().parse().expect(error);let t1temp_convert(t_in);println!(华氏度是 {t1});}}我们可以看到只需要将main中的原程序添加进loop的{}中即可。 让我们运行一下 PS D:\008 rustpro\temp cargo runCompiling temp v0.1.0 (D:\008 rustpro\temp)Finished dev [unoptimized debuginfo] target(s) in 0.46sRunning target\debug\temp.exe 请输入摄氏度值 2 华氏度是 67.6 请输入摄氏度值 3 华氏度是 101.399994 请输入摄氏度值 4 华氏度是 135.2 请输入摄氏度值 1 华氏度是 33.8 请输入摄氏度值 2 华氏度是 67.6 请输入摄氏度值 r thread main panicked at src\main.rs:10:42: error: ParseFloatError { kind: Invalid } note: run with RUST_BACKTRACE1 environment variable to display a backtrace error: process didnt exit successfully: target\debug\temp.exe (exit code: 101)可以看到程序在不停地执行如果用户一直输入正确的值得话但你会发现在终端的记录中最后输入r时rust报错且退出了这是因为程序中没有对非法输入的应对措施当输入非法值时只能报错退出。 但我不准备在本文中完善它我相信随着我们学习rust的深入这个问题会迎刃而解。 如果你看到这里我相信你对rust中变量、函数的使用有了初步的印象了。 下面我们说一下第二个实例即实现斐波那契数列。 斐波那契数列 斐波那契数列应该是比较经典的练手题目了你在学习其他语言如C、python、java中都可以通过编写斐波那契数列来加深对语言的理解。 rust也不例外我在文章一开头就说过此文所列举的两个实例都是rust官方手册中给读者留的课后习题。 其实官方在手册的第二章给了一个很好的实例即猜谜游戏说的非常详细但我们作为学习者在学习了官方手册后自己要学会应用所以我选择用课后习题来作为示例。 斐波那契数列是这样的数列 1123581321345589… 这个数列的规律是从第三项开始每一项的值都是它前面两项的和。用公式表示为 f(n)f(n-1)f(n-2)n2 所以如果要用函数来实现斐波那契数列函数肯定是递归的。 rust实现首先是创建新项目这个不用多说了。 接着创建新的函数命名为fibonacci fn fibonacci(num:i32)-i32{if num3{return 1;}else{return fibonacci(num-1)fibonacci(num-2);} }这个fibonacci函数有个形式参数num数据类型为i32函数的返回值类型由’-符号指出也是i32。 函数体内的逻辑是对num进行判断如果num小于3也就是fibonacci数列的前2项那么函数返回值固定为1如果num大于等于3那么返回值就等于前2项之和。 此处的判断使用了if。。else语句。if else应该不用多说了吧这应该是学习编程的人都会了解的。 几乎你学习任何编程语言都会遇到if语句。 所以本文也不会赘述if。。else语句。 接下来看main函数 use std::io; fn main() {loop{println!(please enter fibonacci number:);let mut numberString::new();io::stdin().read_line(mut number).expect(err);let number:i32number.trim().parse().expect(err);println!(number is {number});for y in 1..number{let xfibonacci(y);println!(fibo({y}) is {x});}} }可以看到几乎和前面的实例一样一点区别在于子函数fibonacci的调用处这里用了for语句 之所以使用for语句因为斐波那契数列是一个数列当我们给定一个斐波那契数列的项索引(n)时我们实际上希望程序能够列出至n项的斐波那契数列所有的项。 for y in 1..number{let xfibonacci(y);println!(fibo({y}) is {x});}同理for循环也是常见的和if语句一样我们会在后续的文章里统一说明此文不赘述。 我们还是看一下实际运行效果吧 PS D:\008 rustpro\fibonacci cargo runCompiling fibonacci v0.1.0 (D:\008 rustpro\fibonacci)Finished dev [unoptimized debuginfo] target(s) in 0.71sRunning target\debug\fibonacci.exe please enter fibonacci number: 2 number is 2 fibo(1) is 1 please enter fibonacci number: 5 number is 5 fibo(1) is 1 fibo(2) is 1 fibo(3) is 2 fibo(4) is 3 please enter fibonacci number: 10 number is 10 fibo(1) is 1 fibo(2) is 1 fibo(3) is 2 fibo(4) is 3 fibo(5) is 5 fibo(6) is 8 fibo(7) is 13 fibo(8) is 21 fibo(9) is 34 please enter fibonacci number: r thread main panicked at src\main.rs:10:46: err: ParseIntError { kind: InvalidDigit } note: run with RUST_BACKTRACE1 environment variable to display a backtrace error: process didnt exit successfully: target\debug\fibonacci.exe (exit code: 101)总结一下rust变量 let x5;//x不可变let mut x5;//x可变let x5; let xa;//x依旧不可变但可以被重名者覆盖且可不同数据类型const x:i325;//常量需指定数据类型
http://www.dnsts.com.cn/news/114034.html

相关文章:

  • 公司网站建设的作用wordpress登录注册插件
  • 用php做的网站源代码本地做网站顺序
  • 汕头网页模板建站wordpress主题在哪个文件夹
  • 网站上的销售怎么做的自己建网站要多少钱
  • 做照片书的网站费用
  • 做网站是否要去工商备案wordpress多用户博客
  • 做网站需要的素材资料长春火车站封闭了吗
  • 网站建设意义和作用哔哩网站开发需求分析模板
  • 张家界建设局网站电话专业团队黑人抬棺图片
  • seo报价单淄博网站建设网站推广优化
  • 网站备案 固定电话南通网站建设论文
  • 清远企业网站建设个人网站酷站赏析
  • 个人网站建设规划实践报告专业的外贸网站
  • 帮人建网站价格好看的wordpress文章模板
  • 网站建设策划解决方案安徽城乡与建设部网站
  • 自己注册个公司做网站怎么样网站分析数据
  • 如何分析网站优缺点青岛网站设计公司
  • 天津做网站费用重庆网站优化公司
  • 合肥做网站多少钱海口网站制作策划
  • 奥特蛋的做网站做ic比较有名的网站
  • 中企动力网站建设 医疗深圳公租房
  • 昆明建网站电话wid2008vps创建网站
  • 北京手机网站搭建费用电商网站的分辨率
  • 前端开发学习网站汽车网站模板下载
  • 招聘网站建设深圳通辽做网站有没有
  • 用软件做的网站权限管理温州云海和联欣哪个做网站比较好
  • 怎么做视频解析网站吗网站怎么自己做推广
  • 做网站Linux山东省住房和城乡建设厅文件
  • 望京SOHO网站建设医院网站素材
  • 比尤果网做的好的网站wordpress微信风格主题