99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

盒語(yǔ)法和模式

2018-08-12 22:03 更新

盒語(yǔ)法和模式

目前,唯一穩(wěn)定可靠地方法就是通過(guò) Box::new 方法來(lái)創(chuàng)建 Box。當(dāng)然,它不可能在穩(wěn)定的 Rust 來(lái)析構(gòu)匹配模式下的 Box。

不穩(wěn)定的 box 關(guān)鍵字可以用來(lái)創(chuàng)建和析構(gòu) Box。相關(guān)的例子如下:

#![feature(box_syntax, box_patterns)]

fn main() {
let b = Some(box 5);
match b {
Some(box n) if n < 0 => {
println!("Box contains negative number {}", n);
},
Some(box n) if n >= 0 => {
println!("Box contains non-negative number {}", n);
},
None => {
println!("No box");
},
_ => unreachable!()
}
}

注意這個(gè)功能目前隱藏在 box_syntax(盒創(chuàng)建方法) 和 box_patterns (析構(gòu)和匹配模型)方法,因?yàn)檫@個(gè)語(yǔ)法在未來(lái)仍可能會(huì)被更改。

返回指針

在很多計(jì)算機(jī)語(yǔ)言中都有指針,用戶(hù)可以通過(guò)返回一個(gè)指針來(lái)避免返回較大數(shù)據(jù)結(jié)構(gòu)的拷貝。比如:

struct BigStruct {
one: i32,
two: i32,
// etc
one_hundred: i32,
}

fn foo(x: Box<BigStruct>) -> Box<BigStruct> {
Box::new(*x)
}

fn main() {
let x = Box::new(BigStruct {
one: 1,
two: 2,
one_hundred: 100,
});

let y = foo(x);
}

這里面的想法就是通過(guò)返回一個(gè)盒,用戶(hù)可以?xún)H僅拷貝一個(gè)指針,從而避免 拷貝 BigStruct 中的上百個(gè) int 數(shù)。

如下為 Rust 的反模式,相反,可以編寫(xiě)成下面的方式:

#![feature(box_syntax)]

struct BigStruct {
one: i32,
two: i32,
// etc
one_hundred: i32,
}

fn foo(x: Box<BigStruct>) -> BigStruct {
*x
}

fn main() {
let x = Box::new(BigStruct {
one: 1,
two: 2,
one_hundred: 100,
});

let y: Box<BigStruct> = box foo(x);
}

這個(gè)方法是一種不犧牲性能的前提下提供了靈活性。

用戶(hù)可能會(huì)認(rèn)為這會(huì)表現(xiàn)出較差的性能:返回一個(gè)值,然后立即用盒裝起來(lái)?這是最糟糕的模式么?Rust 遠(yuǎn)遠(yuǎn)比這些更智能。這并不是將代碼進(jìn)行拷貝。 mainbox 分配足夠的空間,然后傳遞一個(gè)指針 x 來(lái)指向 foo。然后,foo 將值寫(xiě)回 Box<T>。

下面這一點(diǎn)很重要:指針不僅可以?xún)?yōu)化代碼塊中返回的值。也允許調(diào)用者來(lái)選擇他們希望他們?nèi)绾问褂盟麄兊妮敵觥?/p>

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)