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

如何取消网站备案佛山网站优化公司

如何取消网站备案,佛山网站优化公司,阿里巴巴 网站建设,室内设计师培训班多少钱之前的文章 【0】准备 【1】构文・整数・变量 ← 上回 【2】 if・Panic・演练 ← 本次 这是“100 Exercise To Learn Rust”的第2次练习#xff01;本次的主题包括 if 表达式、panic 机制#xff0c;以及对前面内容的总结练习。 本次相关的页面如下#xff1a; 2.3. Bran…之前的文章 【0】准备 【1】构文・整数・变量 ← 上回 【2】 if・Panic・演练 ← 本次 这是“100 Exercise To Learn Rust”的第2次练习本次的主题包括 if 表达式、panic 机制以及对前面内容的总结练习。 本次相关的页面如下 2.3. Branching: if/else2.4. Panics2.5. Factorial [02_basic_calculator/03_if_else] if式 2.3. Branching: if/else 问题如下 /// Return true if n is even, false otherwise. fn is_even(n: u32) - bool {todo!() }#[cfg(test)] mod tests {use crate::is_even;#[test]fn one() {assert!(!is_even(1));}#[test]fn two() {assert!(is_even(2));}#[test]fn high() {assert!(!is_even(231));} }要求返回 n 是偶数时为 truen 是奇数时为 false。 解释 如果忘记这是在用 Rust而是直接使用 if 来编写的话可能会像这样写吧 fn is_even(n: u32) - bool {let result;if n % 2 0 {result true;} else {result false;}return result; }不过这段源码实在让人忍不住想吐槽很多地方。正好借此机会我们可以尝试使用一个叫 Clippy 的 linter 工具。 cargo clippyChecking if_else v0.1.0 (/path/to/100-exercises-to-learn-rust/exercises/02_basic_calculator/03_if_else) warning: function is_even is never used-- exercises/02_basic_calculator/03_if_else/src/lib.rs:2:4| 2 | fn is_even(n: u32) - bool {| ^^^^^^^| note: #[warn(dead_code)] on by defaultwarning: unneeded return statement-- exercises/02_basic_calculator/03_if_else/src/lib.rs:11:5| 11 | return result;| ^^^^^^^^^^^^^| help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return note: #[warn(clippy::needless_return)] on by default help: remove return| 11 - return result; 11 result|warning: unneeded late initialization-- exercises/02_basic_calculator/03_if_else/src/lib.rs:3:5| 3 | let result;| ^^^^^^^^^^^| help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init note: #[warn(clippy::needless_late_init)] on by default help: declare result here| 5 | let result if n % 2 0 {| help: remove the assignments from the branches| 6 ~ true 7 | } else { 8 ~ false| help: add a semicolon after the if expression| 9 | };| warning: this if-then-else expression assigns a bool literal-- exercises/02_basic_calculator/03_if_else/src/lib.rs:5:5| 5 | / if n % 2 0 { 6 | | result true; 7 | | } else { 8 | | result false; 9 | | }| |_____^ help: you can reduce it to: result n % 2 0;| help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool_assign note: #[warn(clippy::needless_bool_assign)] on by defaultwarning: if_else (lib) generated 4 warnings (run cargo clippy --fix --lib -p if_else to apply 2 suggestions)Finished dev profile [unoptimized debuginfo] target(s) in 0.10s第一个警告function is_even is never used 可以忽略。 关于 unneeded return statement 由于 Rust 是一种面向表达式的语言函数最后的 return 是不必要的。 关于 unneeded late initialization 同样地由于 Rust 是面向表达式的语言if 结构也是一个表达式在练习中有解释因此不需要在各个分支中对 result 进行初始化。 综上所述忽略最后一个警告代码可以改成这样 fn is_even(n: u32) - bool {if n % 2 0 {true} else {false} }由于 if 是一个表达式因此可以将返回值直接绑定到 result 上冗长的写法已折叠。 但其实我们可以注意到函数会返回最后被计算的值因此根本不需要绑定到 result。 总结来说上述代码中函数的返回值将是 if 表达式的计算结果从而正确返回了 n 的偶数或奇数判定 $ cargo clippyChecking if_else v0.1.0 (/path/to/100-exercises-to-learn-rust/exercises/02_basic_calculator/03_if_else) warning: function is_even is never used-- exercises/02_basic_calculator/03_if_else/src/lib.rs:2:4| 2 | fn is_even(n: u32) - bool {| ^^^^^^^| note: #[warn(dead_code)] on by defaultwarning: this if-then-else expression returns a bool literal-- exercises/02_basic_calculator/03_if_else/src/lib.rs:3:5| 3 | / if n % 2 0 { 4 | | true 5 | | } else { 6 | | false 7 | | }| |_____^ help: you can reduce it to: n % 2 0| help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool note: #[warn(clippy::needless_bool)] on by defaultwarning: if_else (lib) generated 2 warnings (run cargo clippy --fix --lib -p if_else to apply 1 suggestion)Finished dev profile [unoptimized debuginfo] target(s) in 0.12sfn is_even(n: u32) - bool {n % 2 0 }其实根本不需要 if 表达式啊...我以为是 if 表达式的问题所以陷入了先入为主的思维... 顺便说一下模范解答里也没有用 if 表达式。这是故意设计成这样的题目吗 在这种时候Clippy 真是太伟大了... [02_basic_calculator/04_panics] Panic 2.4. Panics 这是问题的内容。虽然有点长但因为包含了解题所需的信息所以连测试部分也一起提供了。 /// Given the start and end points of a journey, and the time it took to complete the journey, /// calculate the average speed of the journey. fn speed(start: u32, end: u32, time_elapsed: u32) - u32 {// TODO: Panic with a custom message if time_elapsed is 0(end - start) / time_elapsed }#[cfg(test)] mod tests {use crate::speed;#[test]fn case1() {assert_eq!(speed(0, 10, 10), 1);}#[test]// With the #[should_panic] annotation we can assert that we expect the code// under test to panic. We can also check the panic message by using expected.// This is all part of Rusts built-in test framework!#[should_panic(expected The journey took no time at all, thats impossible!)]fn by_zero() {speed(0, 10, 0);} }首先前提是 speed 函数在出现除以 0 的情况时会发生 panic。这本身没有问题但在这种情况下希望输出测试中指定的自定义消息The journey took no time at all, thats impossible! Rust Playground Rust Playground Exercises 中介绍了这个工具所以我也在这里介绍一下。Rust Playground 是一个类似 Wandbox、ideone、TS playground的在线编辑器但专门用于 Rust。 和 Wandbox 一样它可以通过永久链接分享源代码因此在不创建项目时快速检查语法或者在社交媒体上讨论 Rust 时都非常方便。一定要试试哦 解释 如果 time_elapsed 0我们可以预先触发 panic并输出想要显示的消息。这可以通过 if 表达式和 panic! 宏来实现。这个问题才是更适合用 if 的场景吧 fn speed(start: u32, end: u32, time_elapsed: u32) - u32 {// TODO: Panic with a custom message if time_elapsed is 0if time_elapsed 0 {panic!(The journey took no time at all, thats impossible!);}(end - start) / time_elapsed }这段话可以翻译为 顺便提一下在这种情况下使用 assert_* 系列宏会很方便因为我们想确认 time_elapsed ! 0所以这次可以使用assert_ne宏。 fn speed(start: u32, end: u32, time_elapsed: u32) - u32 {// TODO: Panic with a custom message if time_elapsed is 0assert_ne!(time_elapsed, 0,The journey took no time at all, thats impossible!);(end - start) / time_elapsed }这段话可以翻译为 assert_* 系列宏可以理解为“保证条件被满足”这样理解起来会更容易。 assert_eq: 保证第一个参数和第二个参数相等如果不相等就会触发 panic。assert_ne: 保证第一个参数和第二个参数不相等如果相等就会触发 panic。 这些宏如果不熟悉确实容易混淆。此外第三个参数可以指定 panic 时的自定义消息因此可以在这里传入测试中要求的文本。 虽然在行数上使用 if 和 assert_* 宏区别不大甚至可能多一行但因为能传达“保证”的含义所以可能有一部分人会觉得这种写法更易读。 问听说使用 Result 类型更好是吗 答是的。在这种可能会出现错误的情况下与其直接引发 panic不如使用程序可以自定义错误处理的 Result 类型更为理想。据说在 “100 Exercises” 中期会介绍这个概念。 虽然在不熟悉的情况下尽可能使用 Result 类型确实不会出错但理想情况下我们也应该学习如何在合适的场景下使用 panic。以下是一些适合使用 panic也就是 unwrap 系方法的情况。 在编译时已确定值且不可能发生 panic 的情况下 使用 unwrap反而会让代码更易读。 在 main 函数的开头读取环境变量或依赖文件时 使用 Result 进行分支处理往往显得冗长。在这种情况下使用 expect会是个不错的选择。 一般来说Result 类型适用于处理用户输入等“在运行时未确定输入”的情况。考虑到大多数程序都涉及这样的场景尽管这有些偏见所以使用 Result 类型的情况会更多。 [02_basic_calculator/05_factorial] 尝试编写函数 2.5. Factorial 问题是...除了测试部分之外只有注释所以我将注释内容总结如下 请定义一个接收非负整数 n 的函数 factorial并返回 n 的阶乘n!。 阶乘是从 1 到 n 的所有正整数的乘积。例如5! 5 * 4 * 3 * 2 * 1 120。0! 定义为 1。factorial(0) 应返回 1factorial(1) 也应返回 1factorial(2) 应返回 2...依此类推。 请使用到目前为止所学的内容。你还没有学到循环所以请使用递归来实现 问题 // Define a function named factorial that, given a non-negative integer n, // returns n!, the factorial of n. // // The factorial of n is defined as the product of all positive integers up to n. // For example, 5! (read five factorial) is 5 * 4 * 3 * 2 * 1, which is 120. // 0! is defined to be 1. // // We expect factorial(0) to return 1, factorial(1) to return 1, // factorial(2) to return 2, and so on. // // Use only what you learned! No loops yet, so youll have to use recursion!#[cfg(test)] mod tests {use crate::factorial;#[test]fn first() {assert_eq!(factorial(0), 1);}#[test]fn second() {assert_eq!(factorial(1), 1);}#[test]fn third() {assert_eq!(factorial(2), 2);}#[test]fn fifth() {assert_eq!(factorial(5), 120);} } 确实我们在 Rust 里还没学到循环但就这么直接用递归真的好吗……算了没关系。 解释 只需要写一个用于终止递归的保护条件以及一个用于递归求值的部分就行了。 fn factorial(n: u32) - u32 {if n 0 {return 1;}n * factorial(n - 1) }这道题作为到目前为止问题的总结是很合适的。 语法 通过定义函数的形式复习了之前的内容。 非负整数 将类型设为 u32 后就不必担心传入负数作为参数因此不需要额外的异常处理。 变量 以函数参数的形式出现。 if 表达式和 Panic 如果传入 0 作为参数执行 n - 1 会引发 panic但因为有保护条件阻止了这种情况的发生所以没有问题。 虽然在我的写法中没有使用表达式但模范解答似乎要求对表达式有一定的理解。 回顾这道题发现它设计得相当好让人惊讶。 总结 虽然还没涉及到循环等更高级的语法但最后这个问题确实相当有趣。 那么让我们进入下一个问题吧 下一篇文章: 【3】可变性・循环・溢出
http://www.w-s-a.com/news/261527/

相关文章:

  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云
  • 大连零基础网站建设教学电话有哪些比较好的做ppt好的网站
  • 哪个网站做logo设计我的建筑网
  • php电子商务网站开发沂源手机网站建设公司
  • html和php做网站哪个好3gcms企业手机网站整站源码asp
  • 网站建设网页设计案例云南建设厅网站删除
  • 杏坛网站制作太原做网站要多少钱呢
  • 做新闻类网站还有市场吗东莞黄页网广告
  • 地方网站做外卖专业做互联网招聘的网站有哪些
  • 网站推广公司兴田德润紧急网页升级紧急通知
  • 厦门做网站哪家强企业网站网页设计的步骤
  • 普拓网站建设济南行业网站建设
  • 燕郊 网站开发网站里的地图定位怎么做
  • 门户网站建设招标互联网创业项目概述
  • 用什么做网站比较好市场调研公司是做什么的
  • 电商网站充值消费系统绍兴网站优化
  • 深圳网站建设公司联虚拟币交易网站开发
  • 专业网站设计建设公司抖音代运营公司排名前十强
  • 做网站架构肃北蒙古族自治县建设局网站
  • 推广网站怎么建经济研究院网站建设方案
  • 网站建设商家淘宝客自建网站做还是用微信qq做
  • django做网站效率高吗涉县移动网站建设报价
  • 做外贸网站注册什么邮箱能够做渗透的网站
  • 购物网站 怎么做织梦网站会员功能
  • 北京市网站开发公司郑州联通网站备案
  • 温岭专业营销型网站建设地址wordpress小程序怎么不用认证审核