match option {
Some(_) => println!("yes"),
None => println!("no")
}
match也是表达式:
let option: Option<u8> = Some(1);
let surely = match option {
Some(i) => i,
None => 0
}
println!("{surely}");
你可以看看Option的文档(或通过IDE的自动补齐,看看都有哪些可以使用的trait或方法) 。
你也许注意到了,你可以使用.unwrap_or(val)来代替上述代码(上述match等价于.unwrap_or(0)) 。
文章插图
Loop
loop循环是最简单的循环 。只需要使用loop即可 。
loop {
if something { break }
}
该代码会一直运行,直到遇到break(或return,return也会同时返回父函数) 。文章插图
for
for循环是最简单易用的循环 。它比传统的for循环更容易使用 。
for i in 1..3 {} // for(let i = 1; i < 3; i++) // i++ is not a thing, see things to note
for i in 1..=3 {} // for(let i = 1; i <= 3; i++)
for i in 1..=var {} // for(let i = 1; i <= var; i++)
for i in array_or_vec {} // for(let i of array_or_vec) in JS
// again, as most other things, uses a trait, here named "iterator"
// for some types, you need to call `.iter` or `.into_iter`.
// Rust Compiler will usually tell you this.
for i in something.iter {}
文章插图
while
很简单的循环 。与其他语言不同,Rust没有do...while,只有最基础的while 。
while condition {
looped;
}
语法与if一样,只不过内容会循环执行 。文章插图
打印输出
打印输出可以使用 print! 和 println! 。
!表示这是一个宏(即可以扩展成其他代码的快捷方式),但你不需要过多考虑 。另一个常用的宏是 vec!,它能利用数组创建 Vec<T> (使用 [] 内的值) 。
这些宏都有一个简单的模板系统 。
● 输出一行使用 println! 。
● 输出一个静态字符串使用 print!("something") 。println!中ln的意思是行,也就是说它会添加换行符号(n) 。console.log会默认添加换行 。
● 要输出一个实现了Display trait的值(绝大多数基本类型都实现了),可以使用 print!("{variable}") 。
● 要输出一个实现了Debug trait的值(可以从Display继承),使用 print!("{variable:?}") 。
● 要输出更复杂的实现了Display trait的内容,使用 print!("{}", variable) 。
● 要输出更复杂的实现了Debug trait的内容,使用 print!("{:?}", variable) 。
文章插图
Trait
Trait是Rust中最难理解的概念之一,也是最强大的概念之一 。
Rust没有采用基于继承的系统(面向对象的继承,或JavaScript基于原型的继承),而是采用了鸭子类型(即,如果一个东西像鸭子一样叫,那么它就是鸭子) 。
每个类型都有且只有一个“默认”(或匿名)trait,只能在与该类型同一个模块中实现 。通常都是该类型独有的方法 。
其他的都叫trait 。例如:
trait Duck {
fn quack(&self) -> String;
/// returns if the duck can jump
fn can_jump(&self) -> bool { // default trait implementation. Code cannot have any assumptions about the type of self.
false // by default duck cannot jump
}
}
struct Dog; // a struct with empty tuple
impl Dog { // a nameless default trait.
fn bark(&self) -> String { String::from("bark!") }
}
impl Duck for Dog { // implement Duck trait for Dog type (struct)
fn quack(&self) -> String { String::from("quark!") } // dog kind of quacks differently
}
let dog = Dog {};
dog.bark;
dog.quack;
首先,我们定义了trait(在面向对象语言中叫做接口,但它只包含方法或函数) 。然后为给定的类型(上例中为Dog)实现trait 。一些trait可以自动实现 。常见的例子就是Display和Debug trait 。这些trait要求,结构中使用的类型必须要相应地实现Display或Debug 。
#[derive(Display,Debug)]
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 从中医角度看福鼎白茶[养生茶]
- 太阳死亡后会变成 太阳从出生到死亡的过程
- 周杰伦经典歌词分享
- 男人爱冒汗是什么原因
- 月食每年发生几次 我国日食月食记录从哪朝开始
- 火星的5大秘密 从火星上看地球好恐怖
- 各类程序员学习路线图 Get了吗
- 数据库主从不一致,怎么解?
- 如何挑选羊奶?
- 放下从杯茶开始,杯中的茶越发的凉