变量:
绑定
fn main() {
let x = 5;//let关键字被用来声明一个绑定
let (a ,b) = (1 ,2);//类似python的语法,在Rust中叫做模式
let t: i32 = 5;//添加一个添加类型为32位整型
}
上面的代码在编译的时候会出现警告,告诉你绑定的变量都没有使用过。
fn main() {
let x = 5;//let关键字被用来声明一个绑定
x = 10;//会得到编译错误,因为绑定的默认是不可以改变的
}
而且变量绑定必须要初始化,若是输出未初始化的绑定会无法编译
可变性
如果想要可以随意被赋值、改变使用mut关键字
fn main() {
let mut x = 5;//mut关键字使x可以被改变为其他值
x = 10;
}
作用域
与c语言的作用域原理基本类似,用花括号来限制作用域。不同的是,在同一个作用域当中,后声明的同名变量绑定会被覆盖。
fn main() {
let x: i32 = 8;
{
println!("{}",x);//输出8
let x = 12;
println!("{}",x);//输出12
}
println!("{}",x);//输出8
let x = 42;//可以重复绑定x
println!("{}",x);//42
}
例子
fn main() {
let mut x: i32 = 1;
x = 7;
let x = x;//把x绑定到x上,x值为7
let y = 4;
let y = "abc";//y改变绑定的类型
}
函数:
用关键字fn来声明函数
fn print_sum(x: i32, y: i32)//声明函数print_sum,设置两个i32类型参数x和y输出和
{
println!("sum is {}",x+y);
}
fn main() {
print_sum(5,6);
}
与let不同,你必须为函数参数声明类型。下面代码将不能工作:
fn print_sum(x, y){
println!("sum is: {}", x+y);
}
会获得如下错误:
expected one of `!`,`:`,or `@`, found `)`
fn print_sum(x, y) {
有返回值的函数
fn get_sum(x: i32, y: i32)->i32//返回一个i32类型
{
x+y//注意这里没有分号
}
fn main() {
println!("{} ",get_sum(5,6));
}
很奇怪?
文档中的意思是
表达式返回一个值,而语句不返回值
x+y;是一个语句
x+y是一个表达式
y=5是一个表达式,但是返回的值没什么用,在c语言当中些y=5是会返回y的这个值,而在rust语言当中不会
//在rust语言当中
let mut y = 5;
let x = (y = 6);//x 的值是 `()`,不是 `6`
int y=5;
int x = (y = 6);//x的值会是6,因为y=6的表达式返回6
它的目的是把任何表达式变为语句
这意味着你用分号来分隔各个表达式
提早返回:
就是提供了人性化的return语句
fn get_sum(x: i32, y: i32)->i32//返回一个i32类型
{
return x+y;
}
fn main() {
println!("{}",get_sum(1,2));
}
发散函数:
发散函数就是什么也不返回的函数。
根据Rust的含义,空函数会返回一个空的元组()
fn diverges() ->! {//发散函数
panic!();
}
fn Void(){
println!("void");
}
fn main() {
println!("{} is a truple",Void()==());//Void返回一个()
diverges();//什么也不返回
}
发散函数有什么意义,可以参考这篇博客
http://blog.youkuaiyun.com/dagewxw/article/details/50205985
函数指针:
和c语言当中的函数指针比较像,就是把函数当成一个对象来使用
fn plus_one(i: i32) -> i32{
i+1
}
fn main() {
let f: fn(i32) -> i32 = plus_one;
let ff = plus_one;
println!("{}",ff(5));//6
println!("{}",f(5));//6
}
来自Rust book 1.14版本
to be continue~