最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解Rust?結(jié)構(gòu)體的使用

 更新時(shí)間:2022年11月03日 12:07:05   作者:古明地覺  
結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它允許我們將多個(gè)不同的類型組合成一個(gè)整體。下面我們就來學(xué)習(xí)如何定義和使用結(jié)構(gòu)體,并對(duì)比元組與結(jié)構(gòu)體之間的異同,需要的可以參考一下

楔子

結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它允許我們將多個(gè)不同的類型組合成一個(gè)整體。下面我們就來學(xué)習(xí)如何定義和使用結(jié)構(gòu)體,并對(duì)比元組與結(jié)構(gòu)體之間的異同。后續(xù)我們還會(huì)討論如何定義方法和關(guān)聯(lián)函數(shù),它們可以指定那些與結(jié)構(gòu)體數(shù)據(jù)相關(guān)的行為。

定義并實(shí)例化結(jié)構(gòu)體

結(jié)構(gòu)體與我們之前討論過的元組有些相似,和元組一樣,結(jié)構(gòu)體中的數(shù)據(jù)可以擁有不同的類型。而和元組不一樣的是,結(jié)構(gòu)體需要給每個(gè)數(shù)據(jù)賦予名字以便清楚地表明它們的意義。正是由于有了這些名字,結(jié)構(gòu)體的使用要比元組更加靈活:你不再需要依賴順序索引來指定或訪問實(shí)例中的值。

關(guān)鍵字 struct 被用來定義并命名結(jié)構(gòu)體,一個(gè)良好的結(jié)構(gòu)體名稱應(yīng)當(dāng)能夠反映出自身數(shù)據(jù)組合的意義。除此之外,我們還需要在隨后的花括號(hào)中聲明所有數(shù)據(jù)的名字及類型,舉個(gè)例子:

struct?Girl?{
????name:?String,
????age:?u8,
????email:?String,
}

為了使用定義好的結(jié)構(gòu)體,我們需要為每個(gè)字段賦予具體的值來創(chuàng)建結(jié)構(gòu)體實(shí)例,可以通過聲明結(jié)構(gòu)體名稱,并使用一對(duì)大括號(hào)包含鍵值對(duì)的方式來創(chuàng)建實(shí)例。其中的鍵對(duì)應(yīng)字段的名字,而值則對(duì)應(yīng)我們想要在這些字段中存儲(chǔ)的數(shù)據(jù)。

let?g?=?Girl?{
????name:?String::from("古明地覺"),
????age:?16,
????email:?String::from("satori@komeiji.com"),
};

注意:字段的賦值順序和在結(jié)構(gòu)體中的聲明順序并不需要保持一致,換句話說,結(jié)構(gòu)體的定義就像類型的通用模板一樣,當(dāng)我們將具體的數(shù)據(jù)填入模板時(shí)就創(chuàng)建出了新的實(shí)例。

在獲得了結(jié)構(gòu)體實(shí)例后,我們可以通過點(diǎn)號(hào)來訪問實(shí)例中的特定字段,比如你想獲得某個(gè) Girl 的電子郵件地址,那么可以使用 g.email 來獲取。另外,如果這個(gè)結(jié)構(gòu)體的實(shí)例是可變的,那么我們還可以通過點(diǎn)號(hào)來修改字段中的值。

struct?Girl?{
????name:?String,
????age:?u8,
????email:?String,
}

fn?main()?{
????let?mut?g?=?Girl?{
????????name:?String::from("古明地覺"),
????????age:?16,
????????email:?String::from("satori@komeiji.com"),
????};
????println!("g.email?=?{}",?g.email);
????//?g.email?=?satori@komeiji.com

????g.email?=?String::from("satori@komeiji123.com");
????println!("g.email?=?{}",?g.email);
????//?g.email?=?satori@komeiji123.com
}

需要注意的是,一旦實(shí)例可變,那么實(shí)例中的所有字段也將是可變的。比如代碼中的變量 g 聲明為 mut,那么不僅它本身是可變的(可以賦值一個(gè)新的結(jié)構(gòu)體實(shí)例給它),它內(nèi)部的字段也是可變的(可以對(duì)內(nèi)部的字段進(jìn)行修改)。

這和我們之前介紹的數(shù)組和元組類似,對(duì)于任意一個(gè)復(fù)合類型的變量來說,不管是重新賦值,還是修改內(nèi)部的某個(gè)元素,都要求變量必須是可變的。

當(dāng)然結(jié)構(gòu)體實(shí)例也如同其它表達(dá)式一樣,我們可以在函數(shù)體的最后一個(gè)表達(dá)式中構(gòu)造結(jié)構(gòu)體實(shí)例,來隱式地將這個(gè)實(shí)例作為結(jié)果返回。

struct?Girl?{
????name:?String,
????age:?u8,
????email:?String,
}

fn?build_girl(name:?String,?age:?u8,
??????????????email:?String)?->?Girl?{
????Girl?{
????????name:?name,
????????age:?age,
????????email:?email,
????}
}

fn?main()?{
????let?g?=?build_girl(
????????String::from("古明地覺"),
????????16,
????????String::from("satori@komeiji.com"),
????);
????println!("{}?{}?{}",?g.name,?g.age,?g.email);
????//?古明地覺?16?satori@komeiji.com
}

在函數(shù)中使用與結(jié)構(gòu)體字段名相同的參數(shù)名可以讓代碼更加易于閱讀,但 name, age, email 同時(shí)作為字段名和變量名被書寫了兩次,則顯得有些煩瑣了,特別是當(dāng)結(jié)構(gòu)體擁有較多字段時(shí),為此 Rust 提供了一個(gè)簡(jiǎn)便的寫法。

簡(jiǎn)化版的實(shí)例化方式

由于上個(gè)例子中的參數(shù)與結(jié)構(gòu)體字段擁有完全一致的名稱,所以有些啰嗦。而如果你 IDE 比較智能的話,應(yīng)該會(huì)給出提示:

所以我們可以使用名為字段初始化簡(jiǎn)寫(field init shorthand)的語(yǔ)法來重構(gòu) build_girl 函數(shù)。這種語(yǔ)法不會(huì)改變函數(shù)的行為,但卻能讓我們免于在代碼中重復(fù)書寫。

fn?build_girl(name:?String,?age:?u8,
??????????????email:?String)?->?Girl?{
????Girl { age,?name,?email }
}

build_girl 函數(shù)中使用了相同的參數(shù)名與字段名,并采用了字段初始化簡(jiǎn)寫的語(yǔ)法進(jìn)行編寫。注意:這里順序不要求一致,變量會(huì)自動(dòng)賦給和自己名字相同的字段。如果變量名和結(jié)構(gòu)體字段名不同,那么在賦值的時(shí)候必須指定字段名。

fn?build_girl(name_xxx:?String,?age_xxx:?u8,
??????????????email_xxx:?String)?->?Girl?{
????Girl?{
????????name:?name_xxx,
????????age:?age_xxx,
????????email:?email_xxx,
????}
}

這里我們故意在變量名的結(jié)尾后面加上了 _xxx,它們和結(jié)構(gòu)體字段不相同,此時(shí)必須指定字段名。可能有人想到了 C 語(yǔ)言,那么下面這種賦值方式可不可以呢?

在 C 和 Go 里面是可以的,如果不指定字段名,那么會(huì)將傳遞的變量按照順序分別賦給結(jié)構(gòu)體的每一個(gè)字段。但在 Rust 里面是不可以的,IDE 也給出了提示,Rust 要求構(gòu)造結(jié)構(gòu)體實(shí)例的時(shí)候必須指定字段名,除非變量名和字段名一致。比如下面這個(gè)例子:

age 變量和結(jié)構(gòu)體的 age 字段名稱一致,那么 age 變量會(huì)賦值給 age 字段,而其它變量和結(jié)構(gòu)體字段的名稱不一致,因此賦值的時(shí)候必須指定字段名,并且賦值的時(shí)候不用考慮順序。

基于已有結(jié)構(gòu)體實(shí)例創(chuàng)建

在很多時(shí)候,新創(chuàng)建的結(jié)構(gòu)實(shí)例中,除了需要修改的小部分字段,其余字段的值與某個(gè)舊結(jié)構(gòu)體實(shí)例完全相同,于是我們可以使用結(jié)構(gòu)體更新語(yǔ)法來快速實(shí)現(xiàn)此類新實(shí)例的創(chuàng)建。先來看看最直接的創(chuàng)建方法:

struct?Girl?{
????name:?String,
????age:?u8,
????email:?String,
}

fn?main()?{
????let?g1?=?Girl?{
????????name:?String::from("古明地覺"),
????????age:?16,
????????email:?String::from("satori@komeiji.com"),
????};
????let?g2?=?Girl?{
????????name:?String::from("古明地覺"),
????????age:?16,
????????email:?String::from("satori@komeiji123.com"),
????};
}

非常直接,在創(chuàng)建新結(jié)構(gòu)體實(shí)例的時(shí)候直接初始化每一個(gè)字段即可,但問題是新創(chuàng)建的 g2 的 name, age 和已經(jīng)存在的 g1 是一樣的,我們沒必要重新寫一遍。所以此時(shí)可以使用結(jié)構(gòu)體更新語(yǔ)法,來根據(jù) g1 創(chuàng)建 g2,舉個(gè)例子。

fn?main()?{
????let?g1?=?Girl?{
????????name:?String::from("古明地覺"),
????????age:?16,
????????email:?String::from("satori@komeiji.com"),
????};
????let?g2?=?Girl?{
????????email:?String::from("satori@komeiji123.com"),
????????..g1
????};
}

我們只修改 email,因此 email 單獨(dú)賦值,剩余的字段和 g1 保持一致。可以使用 ..g1 來表示剩下的那些還未被顯式賦值的字段,都和給定的結(jié)構(gòu)體實(shí)例 g1 一樣擁有相同的值。

并且需要注意,當(dāng)使用 ..g1 這種形式時(shí),它一定要放在最后面。當(dāng)然啦,如果你不習(xí)慣 Rust 提供的這種語(yǔ)法的話,也可以使用最傳統(tǒng)的方式。

這種做法也是可以的,只不過此時(shí)必須要顯式指定字段名。因?yàn)?Rust 規(guī)定只有傳遞和字段名相同的變量時(shí),才可以省略字段名。而 g1.name, g1.age 顯然和字段名不相同,所以此時(shí)字段名不可以省略。

元組結(jié)構(gòu)體

除了上面的方式之外,還可以使用另外一種類似于元組的方式定義結(jié)構(gòu)體,這種結(jié)構(gòu)體也被稱作元組結(jié)構(gòu)體。元組結(jié)構(gòu)體同樣擁有用于表明自身含義的名稱,但你無(wú)須在聲明時(shí)對(duì)其字段進(jìn)行命名,僅保留字段的類型即可。

一般來說,當(dāng)你想要給元組賦予名字,并使其區(qū)別于其它擁有同樣定義的元組時(shí),就可以使用元組結(jié)構(gòu)體。在這種情況下,像常規(guī)結(jié)構(gòu)體那樣為每個(gè)字段命名反而顯得有些煩瑣和形式化了。

struct?Color(i32,?i32,?i32);

struct?Pointer(i32,?i32,?i32);

fn?main()?{
????let?black?=?Color(0,?0,?0);
????let?origin?=?Pointer(0,?0,?0);
}

定義元組結(jié)構(gòu)體時(shí)依然使用 struct 關(guān)鍵字開頭,并由結(jié)構(gòu)體名稱及元組中的類型組成,以上的代碼中展示了兩個(gè)分別叫作 Color 和 Point 的元組結(jié)構(gòu)體定義。

然后基于這兩個(gè)結(jié)構(gòu)體,創(chuàng)建了兩個(gè)變量 black 和 origin。但要注意它們是不同的類型,因?yàn)樗鼈兪遣煌脑M結(jié)構(gòu)體的實(shí)例。我們所定義的每一個(gè)結(jié)構(gòu)體都擁有自己的類型,即便結(jié)構(gòu)體中的字段是完全相同的。

例如,一個(gè)以 Color 類型作為參數(shù)的函數(shù)不能合法地接收 Point 類型的變量,即使它們都是由 3 個(gè) i32 組成的。除此之外,元組結(jié)構(gòu)體實(shí)例的行為就像元組一樣:你可以通過模式匹配將它們解構(gòu)為單獨(dú)的部分,也可以通過 . 模式用索引來訪問特定字段。

沒有字段的空結(jié)構(gòu)體

也許會(huì)出乎你的意料,Rust 允許我們創(chuàng)建沒有任何字段的結(jié)構(gòu)體。因?yàn)檫@種結(jié)構(gòu)體與空元組十分相似,所以它們也被稱為空結(jié)構(gòu)體。當(dāng)你想要在某些類型上實(shí)現(xiàn)一個(gè) trait,卻不需要在該類型中存儲(chǔ)任何數(shù)據(jù)時(shí),空結(jié)構(gòu)體就可以發(fā)揮相應(yīng)的作用。

關(guān)于這里的 trait,后續(xù)會(huì)詳細(xì)介紹。

//?元組結(jié)構(gòu)體
//?里面只需要指定類型
struct?Color();

//?普通的結(jié)構(gòu)體
//?里面需要同時(shí)指定字段名和類型
struct?Girl?{}

//?但以上兩個(gè)結(jié)構(gòu)體都是空結(jié)構(gòu)體
fn?main()?{
????let?color?=?Color();
????let?g?=?Girl?{};
}

如果你有過 Go 的使用經(jīng)驗(yàn)的話,你會(huì)發(fā)現(xiàn)當(dāng)需要往 channel 里面發(fā)送數(shù)據(jù),讓其它 goroutine 解除阻塞的時(shí)候,一般也都會(huì)發(fā)一個(gè)空結(jié)構(gòu)體實(shí)例進(jìn)去。因?yàn)榭战Y(jié)構(gòu)體實(shí)例的大小是 0,在協(xié)調(diào)事件通信的時(shí)候省內(nèi)存。

總之當(dāng)我們需要用一個(gè)結(jié)構(gòu)體去做一些事情,但又不需要它存儲(chǔ)數(shù)據(jù)的時(shí)候,就可以使用空結(jié)構(gòu)體。

結(jié)構(gòu)體數(shù)據(jù)的所有權(quán)

上面的結(jié)構(gòu)體定義中,我們使用了自持所有權(quán)的 String 類型而不是 &String 和 &str,這是一個(gè)有意為之的選擇。因?yàn)槟J(rèn)情況下,結(jié)構(gòu)體的內(nèi)部不可以持有其它數(shù)據(jù)的引用。

這么做的原因也很簡(jiǎn)單,假設(shè)結(jié)構(gòu)體實(shí)例存儲(chǔ)了變量 a 的引用,但某個(gè)時(shí)刻變量 a 離開了作用域,那么相應(yīng)的內(nèi)存會(huì)被回收,而該結(jié)構(gòu)體實(shí)例再通過引用訪問的時(shí)候就會(huì)報(bào)錯(cuò),因?yàn)榭赡軙?huì)訪問非法的內(nèi)存。所以我們希望這個(gè)結(jié)構(gòu)體實(shí)例擁有自身全部數(shù)據(jù)的所有權(quán),而在這種情形下,只要結(jié)構(gòu)體是有效的,那么它攜帶的數(shù)據(jù)也全部都是有效的。

struct?Girl?{
????name:?&String,
????age:?u8,
????email:?&str,
}

這段代碼沒辦法通過檢查,Rust 會(huì)在編譯過程中報(bào)錯(cuò),提示我們應(yīng)該指定生命周期:

正如上面說的那樣,如果結(jié)構(gòu)體實(shí)例的內(nèi)部持有某個(gè)變量的引用,那么當(dāng)結(jié)構(gòu)體實(shí)例存活時(shí),變量也必須存活,否則該結(jié)構(gòu)體就有可能訪問非法的內(nèi)存。

所以默認(rèn)情況下,結(jié)構(gòu)體內(nèi)部不能持有引用,如果想持有,那么必須指定生命周期。通過生命周期來保證結(jié)構(gòu)體實(shí)例中引用的數(shù)據(jù)的壽命不短于實(shí)例本身,從而讓結(jié)構(gòu)體實(shí)例在自己的有效期內(nèi)都能合法訪問引用的數(shù)據(jù)。

生命周期是 Rust 中的一個(gè)獨(dú)有的概念,非常重要,我們后面說,目前就先使用 String 吧。

使用結(jié)構(gòu)體的示例程序

為了能夠了解結(jié)構(gòu)體的使用時(shí)機(jī),讓我們來編寫一個(gè)計(jì)算矩形面積的程序,并給出多個(gè)方案,看看哪種方案最好。

fn?get_area1(width:?u32,?height:?u32)?->?u32?{
????width?*?height
}

fn?get_area2(dimension:?(u32,?u32))?->?u32?{
????dimension.0?*?dimension.1
}

struct?Rectangle?{
????width:?u32,
????height:?u32,
}
fn?get_area3(rectangle:?&Rectangle)?->?u32?{
????rectangle.width?*?rectangle.height
}

以上三個(gè)函數(shù)都可以計(jì)算矩形的面積,那么哪種最好呢?

首先矩形的長(zhǎng)和寬是互相關(guān)聯(lián)的兩個(gè)數(shù)據(jù),但第一個(gè)函數(shù)卻有著兩個(gè)不同的參數(shù),并且沒有任何一點(diǎn)能夠表明這兩個(gè)參數(shù)存在關(guān)聯(lián)。

第二個(gè)函數(shù)要求將長(zhǎng)和寬組合成一個(gè)元組傳過來,它的效果稍微要好一些,使得輸入的參數(shù)結(jié)構(gòu)化了。但與此同時(shí)程序也變得難以閱讀了,因?yàn)樵M并不會(huì)給出其中元素的名字,我們可能會(huì)對(duì)使用索引獲取的值產(chǎn)生困惑和混淆。

在計(jì)算面積時(shí),混淆寬度和高度的使用似乎沒有什么問題,但當(dāng)我們需要將這個(gè)矩形繪制到屏幕上時(shí),這樣的混淆就會(huì)出問題了。我們必須牢牢地記住,元素的索引 0 對(duì)應(yīng)了寬度 width,而索引 1 則對(duì)應(yīng)了高度 height。由于沒有在代碼里表明數(shù)據(jù)的意義,我們總是會(huì)因?yàn)橥浕蚺爝@些不同含義的值而導(dǎo)致各種程序錯(cuò)誤。

于是便有了第三個(gè)函數(shù),它接收一個(gè)結(jié)構(gòu)體的引用。使用結(jié)構(gòu)體無(wú)疑是最好的方式,我們會(huì)分別給結(jié)構(gòu)體本身及它的每個(gè)字段賦予名字,而無(wú)須使用類似于元組索引的 0 或 1,這樣就更加清晰了。

但要注意的是,get_area3 接收的是結(jié)構(gòu)體的引用,而且是不可變引用。正如我們之前提到的,在函數(shù)簽名和調(diào)用過程中使用 & 是因?yàn)槲覀兿M栌媒Y(jié)構(gòu)體,而不是獲取它的所有權(quán),這樣調(diào)用方在函數(shù)執(zhí)行完畢后還可以繼續(xù)使用它。

通過派生 trait 增加實(shí)用功能

需要說明的是,結(jié)構(gòu)體實(shí)例默認(rèn)是不可以打印的。

我們知道宏 println! 可以執(zhí)行多種不同的文本格式化命令,而作為默認(rèn)選項(xiàng),格式化文本中的花括號(hào)會(huì)告知 println! 使用名為 Display 的格式化方法:這類輸出可以直接被展示給終端用戶。我們目前接觸過的所有基礎(chǔ)類型都默認(rèn)實(shí)現(xiàn)了 Display,因?yàn)楫?dāng)你想要給用戶展示類似 1、3.14 這種基礎(chǔ)類型時(shí)沒有太多可供選擇的方式。

但對(duì)于結(jié)構(gòu)體而言,println! 則無(wú)法確定應(yīng)該使用什么樣的格式化內(nèi)容:在輸出的時(shí)候需要逗號(hào)嗎?需要打印花括號(hào)嗎?所有的字段都要被展示嗎?正是由于這種不確定性,Rust 沒有為結(jié)構(gòu)體提供默認(rèn)的 Display 實(shí)現(xiàn)。

那如果像元組那樣使用 {:?} 這種形式可以嗎?我們來試一下。

我們看到也不行,但提示我們?cè)蚴?Rectangle 沒有實(shí)現(xiàn) Debug 這個(gè) trait,那么如何實(shí)現(xiàn)呢?

#[derive(Debug)]
struct?Rectangle?{
????width:?u32,
????height:?u32,
}

fn?main?()?{
????let?rect?=?Rectangle{
????????width:?30,
????????height:?50
????};
????println!("{:?}",?rect);
????println!("{:#?}",?rect);
????/*
????area?=?Rectangle?{?width:?30,?height:?50?}
????area?=?Rectangle?{
????width:?30,
????height:?50,
????}
????*/????
}

以上就成功輸出了,和元組一樣只能使用 {:?} 和 {:#?} 來打印,但是需要添加注解來派生 Debug trait。實(shí)際上,Rust 提供了許多可以通過 derive 注解來派生的 trait,它們可以為自定義的類型增加許多有用的功能。

這里的 trait 到底是啥,后續(xù)會(huì)詳細(xì)說,目前先知道有這么東西、以及怎么讓結(jié)構(gòu)體實(shí)例能夠打印即可。

到此這篇關(guān)于深入了解Rust 結(jié)構(gòu)體的使用的文章就介紹到這了,更多相關(guān)Rust 結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust語(yǔ)言之Copy和Clone詳解

    Rust語(yǔ)言之Copy和Clone詳解

    在 Rust 中,Copy 和 Clone trait 用于控制類型的復(fù)制行為。它們?cè)试S你定義如何復(fù)制類型的值,以及在什么情況下可以復(fù)制。本文將詳細(xì)介紹這兩個(gè) trait 的作用和用法,并通過代碼示例來展示它們的使用,需要的朋友可以參考下
    2023-05-05
  • 為什么要選Rust?學(xué)習(xí)Rust從零開始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目

    為什么要選Rust?學(xué)習(xí)Rust從零開始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目

    本文介紹了Rust語(yǔ)言的核心價(jià)值、應(yīng)用場(chǎng)景、開發(fā)環(huán)境搭建、第一個(gè)Rust項(xiàng)目的創(chuàng)建與擴(kuò)展、調(diào)試、發(fā)布流程,以及新手常見陷阱與避坑方法,通過學(xué)習(xí)Rust,開發(fā)者可以實(shí)現(xiàn)高效且安全的系統(tǒng)級(jí)開發(fā)、網(wǎng)絡(luò)編程和工具開發(fā)
    2026-01-01
  • Rust字符串類型全解析(最新推薦)

    Rust字符串類型全解析(最新推薦)

    Rust語(yǔ)言中,字符串類型眾多,設(shè)計(jì)初衷是為了確保程序的安全、高效和靈活性,本文詳細(xì)解釋了Rust中不同的字符串類型,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Rust中的panic定義及觸發(fā)條件詳解

    Rust中的panic定義及觸發(fā)條件詳解

    這篇文章主要為大家介紹了Rust中的panic定義及觸發(fā)條件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    這篇文章主要介紹了在Rust中如何使用Rc和RefCell來創(chuàng)建引用循環(huán),以及引用循環(huán)可能導(dǎo)致的內(nèi)存泄漏問題,文章還討論了如何使用Weak類型來解決引用循環(huán)問題,特別是在需要雙向引用的場(chǎng)景中,如樹形結(jié)構(gòu),通過理解和掌握這些智能指針的使用,可以編寫更高效且內(nèi)存安全的Rust程序
    2025-02-02
  • 使用Rust制作康威生命游戲的實(shí)現(xiàn)代碼

    使用Rust制作康威生命游戲的實(shí)現(xiàn)代碼

    這篇文章主要介紹了使用Rust制作康威生命游戲,初始rust項(xiàng)目,使用wasm的項(xiàng)目模板,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 教你使用RustDesk?搭建一個(gè)自己的遠(yuǎn)程桌面中繼服務(wù)器

    教你使用RustDesk?搭建一個(gè)自己的遠(yuǎn)程桌面中繼服務(wù)器

    這篇文章主要介紹了RustDesk?搭建一個(gè)自己的遠(yuǎn)程桌面中繼服務(wù)器,主要包括服務(wù)端安裝和客戶端配置方法,配置好相關(guān)操作輸入控制碼即可發(fā)起遠(yuǎn)程或文件傳輸,本文通過圖文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Rust?搭建一個(gè)小程序運(yùn)行環(huán)境的方法詳解

    Rust?搭建一個(gè)小程序運(yùn)行環(huán)境的方法詳解

    rust是一門比較新的編程語(yǔ)言,2015年5月15日,Rust編程語(yǔ)言核心團(tuán)隊(duì)正式宣布發(fā)布Rust?1.0版本,本文給大家介紹Rust?搭建一個(gè)小程序運(yùn)行環(huán)境,以iOS?為例介紹開發(fā)環(huán)境的準(zhǔn)備,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • Rust中的Vector多值存儲(chǔ)使用方法

    Rust中的Vector多值存儲(chǔ)使用方法

    Vector在Rust中是一個(gè)非常靈活和強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),通過有效利用它,我們可以更加方便地處理和操作多個(gè)值,使得代碼更加清晰和易于維護(hù),這篇文章主要介紹了Rust中的Vector多值存儲(chǔ)的利器,需要的朋友可以參考下
    2024-02-02
  • Rust中的模塊系統(tǒng)之控制作用域與私有性詳解

    Rust中的模塊系統(tǒng)之控制作用域與私有性詳解

    這篇文章總結(jié)了Rust模塊系統(tǒng)的基本規(guī)則,包括如何聲明模塊、路徑訪問、私有性與公開性,以及如何使用`use`關(guān)鍵字簡(jiǎn)化路徑引用,通過一個(gè)餐廳系統(tǒng)示例,展示了如何利用模塊劃分功能,并介紹了如何在其他模塊或二進(jìn)制crate中使用這些模塊
    2025-02-02

最新評(píng)論

甘谷县| 治多县| 清新县| 泰州市| 瓦房店市| 原平市| 若羌县| 九龙县| 库尔勒市| 措美县| 靖州| 苗栗县| 贵阳市| 牙克石市| 文山县| 五台县| 乾安县| 常州市| 冀州市| 孟津县| 绥阳县| 凤凰县| 炉霍县| 东乡县| 永春县| 洛宁县| 开原市| 桐庐县| 阜城县| 南江县| 高碑店市| 昂仁县| 扶余县| 大埔区| 民丰县| 威海市| 杭州市| 湄潭县| 沙河市| 毕节市| 马公市|