NLL(Non-Lexical-Lifetime)
一个变量的生命周期不再用大括号确定,而是用其从定义开始到最用使用时刻决定。
use std::collections::HashMap;
fn foo()->Vec<char>{
let mut data=vec!['a','b','c'];
let slice =&mut data;
capitalize(slice);
data.push('a');
data.push('b');
data.push('c');
data
}
fn test_insert(){
let mut map = HashMap::new();
map.insert(3,4);
match map.get_mut(&3){
Some(value) =>println!("{}",value),
None => {map.insert(3,5);}
};
}
fn capitalize(data:&mut Vec<char>){
data.push('a');
}
fn main(){
println!("{:?}",foo());
test_insert();
}
特殊返回类型 发散类型!
发散类型可以转化成任意类型,但是一旦发散类型被使用,程序就寄了。
let p =if x>100{
panic!("error");
}else{
100
}
默认返回值 ()
当不写返回值时,返回值默认为uint()
.
const fn
编译时执行函数
长生存期变量可以缩短会带来的问题
struct MyCell<T>{
value :T
}
impl<T> MyCell<T>{
fn new(v:T)->Self where T:Copy{
MyCell{value:v}
}
fn set(&self,v:T)where T:Copy{
unsafe{
let p =&(self.value) as *const T as *mut T;
*p =v;
}
}
fn get(&self)->T where T:Copy{
self.value
}
}
fn test(t:&MyCell<&i32>){
let tmp=1;
t.set(&tmp);
}
fn main(){
let t =MyCell::new(&1000i32);
test(&t);
println!("{} ",t.get());
}