四川建设信息共享网站,虹桥做网站公司,整站优化seo平台,全球搜索引擎排名感悟#xff1a;感觉rust好像缝合怪#xff0c;既有python的影子#xff0c;又有java和cpp的影子#xff0c;可能这就是新型编程语言趋势吧。而且他的各种规范很严格很规范#xff0c;比java还更工程#xff0c;各种规范不对都有warning。
命名规范#xff1a;蛇形命名…感悟感觉rust好像缝合怪既有python的影子又有java和cpp的影子可能这就是新型编程语言趋势吧。而且他的各种规范很严格很规范比java还更工程各种规范不对都有warning。
命名规范蛇形命名法跟深度学习的python写法一样。 Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中所有字母都是小写并使用下划线分隔单词。 cargo
基本上rust都是建一个项目这样方便管理。
创建项目
cargo new pro_name编译
cd pro_name
cargo build直接run
cd pro_name
cargo run删除项目
del pro_name -Force变量不可变
rust中变量默认都是不可变得如果要改变使用mut关键字来修饰变量。
let foo 3; // 不可变
let mut foo2 3; // 可以改变引用在默认情况也是不可变的
crate
翻译为集装箱类型于cpp中得库python中得包。
use std::io; // 导入io包
use std::rand::Rng; // 导入随机数包隐藏shadow
rust 允许使用同名的新变量来隐藏旧变量的值。
let a 3; // 可以
let a a * 3; // 可以
let a a 3; // 可以布尔表达式
在cpp中数字可以隐式转换为布尔值而rust中数字不可以隐式转换为布尔值。
cpp
if(1) puts(YES);
else puts(NO);rust
if 1 1 { // if 1 { } 错误println!(YES);
} else {println!(NO);
}match 和 expect
expect
Rust 标准库中有很多叫做 Result 的类型一个通用的 Result 以及在子模块中的特化版本比如 io::Result。
Result 类型是 枚举enumerations通常也写作 enums。枚举类型持有固定集合的值这些值被称为枚举的 成员variants。第六章将介绍枚举的更多细节。
Result 的成员是 Ok 和 ErrOk 成员表示操作成功内部包含成功时产生的值。Err 成员则意味着操作失败并且包含失败的前因后果。
这些 Result 类型的作用是编码错误处理信息。Result 类型的值像其他类型一样拥有定义于其上的方法。io::Result 的实例拥有 expect 方法。如果 io::Result 实例的值是 Errexpect 会导致程序崩溃并显示当做参数传递给 expect 的信息。如果 read_line 方法返回 Err则可能是来源于底层操作系统错误的结果。如果 io::Result 实例的值是 Okexpect 会获取 Ok 中的值并原样返回。在本例中这个值是用户输入到标准输入中的字节数。
match
进行匹配
let guess: u32 match guess.trim().parse() {Ok(num) num,Err(_) continue,
};**语句和表达式 **
语句没有返回值。
let x 5; // 这是语句没有返回值
let x (let y 5); // 错误 y 5 没有返回值
函数调用是一个表达式。宏调用是一个表达式。我们用来创建新作用域的大括号代码块{}也是一个表达式。
let x 5;
let y {let x 3;x 1
};
// x 5, y 4这个表达式
{let x 3;x 1
}是一个代码块它的值是 4。这个值作为 let 语句的一部分被绑定到 y 上。注意结尾没有分号的那一行 x1与你见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的结尾加上分号它就变成了语句而语句不会返回值。在接下来探索具有返回值的函数和表达式时要谨记这一点。
函数
Rust不关心函数定义在哪里只要定义了就行与cpp系不同。
具有返回值得函数
函数可以向调用它的代码返回值。我们并不对返回值命名但要在箭头-后声明它的类型。在 Rust 中函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值可从函数中提前返回但大部分函数隐式的返回最后的表达式。
fn main() {println!({},foo());
}
fn foo() - i32 {let x 3;x 1 // 表达式作为返回值
}fn main() {println!({},foo());
}
fn foo() - i32 {let x 3;return x 1; // return 返回值
}函数参数
函数也可以被定义为拥有 参数parameters参数是特殊变量是函数签名的一部分。当函数拥有参数形参时可以为这些参数提供具体的值实参。技术上讲这些具体值被称为参数arguments但是在日常交流中人们倾向于不区分使用 parameter 和 argument 来表示函数定义中的变量或调用函数时传入的具体值。
在函数签名中必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定要求在函数定义中提供类型注解意味着编译器不需要你在代码的其他地方注明类型来指出你的意图。
fn main() {println!({},foo(4));
}
fn foo(x:i32) - i32 {let x x * x;x 1
}