繫結
fn
main()
上面的**在編譯的時候會出現警告,告訴你繫結的變數都沒有使用過。
fn
main()
而且變數繫結必須要初始化,若是輸出未初始化的繫結會無法編譯
可變性
如果想要可以隨意被賦值、改變使用mut關鍵字
fn
main()
作用域
與c語言的作用域原理基本類似,用花括號來限制作用域。不同的是,在同乙個作用域當中,後宣告的同名變數繫結會被覆蓋。
fn
main() ",x);//輸出8
let x = 12;
println!("{}",x);//輸出12
}println!("{}",x);//輸出8
let x = 42;//可以重複繫結x
println!("{}",x);//42
}
例子
fn
main()
用關鍵字fn來宣告函式
fn
print_sum(x: i32, y: i32)//宣告函式print_sum,設定兩個i32型別引數x和y輸出和
",x+y);}fn
main()
與let不同,你必須為函式引數宣告型別。下面**將不能工作:
fn
print_sum(x, y)", x+y);
}
會獲得如下錯誤:
expected one of `!`,`:`,
or`@
`, found `)
`fn print_sum(x, y)
fnmain() ",get_sum(5,6));
}
很奇怪?
文件中的意思是
表示式返回乙個值,而語句不返回值
x+y;是乙個語句
x+y是乙個表示式
y=5是乙個表示式,但是返回的值沒什麼用,在c語言當中些y=5是會返回y的這個值,而在rust語言當中不會
//在rust語言當中
letmut 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型別
fnmain() ",get_sum(1,2));
}
發散函式:
發散函式就是什麼也不返回的函式。
根據rust的含義,空函式會返回乙個空的元組()
fn
diverges() ->!
fnvoid()
fnmain() is a truple",void()==());//void返回乙個()
diverges();//什麼也不返回
}
發散函式有什麼意義,可以參考這篇部落格
函式指標:
和c語言當中的函式指標比較像,就是把函式當成乙個物件來使用
fn
plus_one(i: i32) -> i32
fnmain() ",ff(5));//6
println!("{}",f(5));//6
}
來自rust book 1.14版本
to be continue~
Rust 入門 變數與可變性
fn main x x 6 如果我們對乙個不可變得變數進行再次賦值的操作 編譯器會丟擲乙個異常 cannot assign twice to tmmutable variable println x x fn main x x 6 println x x cargo run x 5 x 6 在程式執...
Rust中變數的複製與Copy trait
示例程式 fn main y x,y 輸出 x 123,y 123 上述程式中,在建立變數 y 之後,變數 x 繼續有效。而不會想 string 的賦值一樣發生移動 這是因為對於包括整型在內的一些型別來說,在編譯時可以得知自己的大小,並且能夠將自己的資料完整地儲存在棧記憶體中。因為資料的拷貝全部發生...
Rust學習四 rust的函式 注釋與控制流
rust以fn為關鍵字宣告乙個函式。函式命名規範為全小寫,以下劃線為分隔的單詞。fn main 多個引數以逗號分隔,函式引數必須指定資料型別 fn test x i32,y u64 函式體由一系列的以表示式結尾的語句組成。到目前為止我們只涉及了沒有表示式結尾的函式,但是能看出表示式是語句的一部分。因...