Gopher转Rust辣眼睛语法排行榜
作者:中弈 - sealos作者,sealer发起人
TOP 10 经常忘记写的分号
fn add_with_extra(x: i32, y: i32) -> i32 {
let x = x + 1; // 语句
let y = y + 5; // 语句
x + y // 表达式
}
当你是从golang刚转过来,你一定经常忘记写分号, 对于 Rust 语言而言,这种基于语句和表达式的方式是非常重要,而且很多时候有了表达式会很方便, 比如不用再写return,或者在匹配的时候使用。
语句执行一些操作无返回值,表达式会求值后返回一个值,所以分号‘;’就很重要了。
TOP 9 感叹号
fn main() {
println!("hello world");
}
这是什么鬼,为什么println后面要加个感叹号,是叫我别打印嘛?其实这是go里面没有的宏,宏可以干很多函数无能为力的事,在很多情况下也非常方便。 比如元编程,可变参数,为指定的类型实现某个特征等,而且编译之前就做好了展开。其本质是生成(替换)一些代码,让我们少写代码。
TOP 8 &str String::from("傻傻分布清楚")
怎么整个字符串这么麻烦。。。
let s = "hello";
s是被硬编码进程序的,大小固定在栈区内存分配,类型为&str.
let s = String::from("hello");
s.push_str(",world!");
s大小不可知道,分配在堆上,类型为String.
TOP 7 引用借用
常规的引用是一个指针类型,指向了对象存储的内存地址。 借用:获取变量的引用。
let x = 5;
let y = &x;
这里y就是x的引用。引用的时候变量的所有权(一夫一妻)不会发生转移,引用=(出轨)。
fn main() {
let s1 = String::from("hello");
let len = calculate_length(&s1);
println!("The length of '{}' is {}.", s1, len);
}
fn calculate_length(s: &String) -> usize {
s.len()
}
TOP 6 Attribute
#[allow(dead_code)]
fn unused_fu