Day3 用 rustlings 練習(xí) Rust 語言

大家好

今天 完成 2024年自動駕駛OS開發(fā)訓(xùn)練營-初階營第四期-導(dǎo)學(xué)

Day2用 rustlings 練習(xí) Rust 語言 -Move Semantics

在正式開營之前战授,我們特別設(shè)置了導(dǎo)學(xué)階段剩檀,旨在幫助大家更好地迎接頗具挑戰(zhàn)性的項目實戰(zhàn)。

導(dǎo)學(xué)階段包括一系列精心準備的視頻課程和配套習(xí)題塑悼。
github鏈接:https://classroom.github.com/a/7jeNPL16

第一階段作業(yè) rustlings ranking:https://cicvedu.github.io/rust-rustlings-semester-4-ranking/

第二階段作業(yè):https://docs.qq.com/doc/DSk5xTHRJY1FZVUdK
沖??呀裸弦!

Structs

Rust has three struct types: a classic C struct, a tuple struct, and a unit struct.

Further information

我的題目

https://github.com/cicvedu/rustlings-semester-4-watchpoints

Enums

Rust allows you to define types called "enums" which enumerate possible values.
Enums are a feature in many languages, but their capabilities differ in each language. Rust’s enums are most similar to algebraic data types in functional languages, such as F#, OCaml, and Haskell.
Useful in combination with enums is Rust's "pattern matching" facility, which makes it easy to run different code for different values of an enumeration.

Further information

This section explores a case study of Option, which is another enum defined by the standard library.

enum Option<T> {
None,
Some(T),
}

Strings

Rust has two string types, a string slice (&str) and an owned string (String).
We're not going to dictate when you should use which one, but we'll show you how
to identify and create them, as well as use them.

Further information

C++ 默認綁定的祟同,只有指針類型 在&

https://github.com/cicvedu/rustlings-semester-4-watchpoints

創(chuàng)建ssh key,用于ssh方式克隆github代碼理疙。
在linux環(huán)境下晕城,使用ssh-keygen -t rsa -b 4096 -C "你的郵箱"命令,創(chuàng)建ssh key窖贤,
下面的選項全部直接敲回車即可砖顷。 隨后使用 cat ~/.ssh/id_rsa.pub

Modules

In this section we'll give you an introduction to Rust's module system.

Further information

Hashmaps

A hash map allows you to associate a value with a particular key.
You may also know this by the names unordered map in C++,
dictionary in Python or an associative array in other languages.

This is the other data structure that we've been talking about before, when
talking about Vecs.

Further information

**
****# Options

Type Option represents an optional value: every Option is either Some and contains a value, or None, and does not.
Option types are very common in Rust code, as they have a number of uses:

  • Initial values
  • Return values for functions that are not defined over their entire input range (partial functions)
  • Return value for otherwise reporting simple errors, where None is returned on error
  • Optional struct fields
  • Struct fields that can be loaned or "taken"
  • Optional function arguments
  • Nullable pointers
  • Swapping things out of difficult situations

Further Information

Error handling

Most errors aren’t serious enough to require the program to stop entirely.
Sometimes, when a function fails, it’s for a reason that you can easily interpret and respond to.
For example, if you try to open a file and that operation fails because the file doesn’t exist, you might want to create the file instead of terminating the process.

Further information

Generics

Generics is the topic of generalizing types and functionalities to broader cases.
This is extremely useful for reducing code duplication in many ways, but can call for rather involving syntax.
Namely, being generic requires taking great care to specify over which types a generic type is actually considered valid.
The simplest and most common use of generics is for type parameters.

Further information

Traits

A trait is a collection of methods.

Data types can implement traits. To do so, the methods making up the trait are defined for the data type. For example, the String data type implements the From<&str> trait. This allows a user to write String::from("hello").

In this way, traits are somewhat similar to Java interfaces and C++ abstract classes.

Some additional common Rust traits include:

  • Clone (the clone method)
  • Display (which allows formatted display via {})
  • Debug (which allows formatted display via {:?})

Because traits indicate shared behavior between data types, they are useful when writing generics.

Further information

在 Rust 中,當你創(chuàng)建一個持有引用的 struct 時赃梧,你需要確保這些引用在 struct 的使用期間保持有效滤蝠。這里的問題在于 Book 這個結(jié)構(gòu)體的字段 authortitle 是對字符串字面量的引用,但在 main 函數(shù)中槽奕,它們是對 String 類型的引用几睛。由于 String 類型的大小可變,它不能保證其引用的生命周期粤攒,因此我們需要明確地指定生命周期所森。

要修復(fù)這個問題囱持,我們需要為 Book 結(jié)構(gòu)體中的引用添加生命周期注解。這可以通過在結(jié)構(gòu)體定義中為每個引用字段添加生命周期參數(shù)來完成焕济。這里是修復(fù)后的代碼:

struct Book<'a> {
    author: &'a str,
    title: &'a str,
}

fn main() {
    let name = String::from("Jill Smith");
    let title = String::from("Fish Flying");
    
    // 必須保證 name 和 title 在 Book 使用期間有效
    let book = Book { author: &name, title: &title };

    println!("{} by {}", book.title, book.author);
}

在這個修復(fù)版本中纷妆,我們?yōu)?Book 結(jié)構(gòu)體添加了一個生命周期參數(shù) 'a,并在 authortitle 字段的引用上使用了這個生命周期參數(shù)晴弃。這意味著 Book 中的引用必須和 'a 生命周期一樣長掩幢。

然而,上面的代碼仍然無法編譯上鞠,因為 main 函數(shù)中的 nametitleString 類型际邻,而不是 &str 類型。我們需要將它們轉(zhuǎn)換為字符串切片(&str):

fn main() {
    let name = String::from("Jill Smith");
    let title = String::from("Fish Flying");

    // 轉(zhuǎn)換 String 為 &str 類型的切片
    let book = Book {
        author: name.as_str(),
        title: title.as_str(),
    };

    println!("{} by {}", book.title, book.author);
}

在這個版本中芍阎,我們使用 as_str 方法將 String 類型轉(zhuǎn)換為 &str 類型的切片世曾,這樣就可以滿足 Book 結(jié)構(gòu)體的要求了。這樣修改后谴咸,代碼應(yīng)該能夠編譯并運行轮听,打印出書名和作者名。

本文由mdnice多平臺發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岭佳,一起剝皮案震驚了整個濱河市血巍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌珊随,老刑警劉巖述寡,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玫恳,居然都是意外死亡辨赐,警方通過查閱死者的電腦和手機优俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門京办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帆焕,你說我怎么就攤上這事惭婿。” “怎么了叶雹?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵财饥,是天一觀的道長。 經(jīng)常有香客問我折晦,道長钥星,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任满着,我火速辦了婚禮谦炒,結(jié)果婚禮上贯莺,老公的妹妹穿的比我還像新娘。我一直安慰自己宁改,他們只是感情好缕探,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著还蹲,像睡著了一般爹耗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谜喊,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天潭兽,我揣著相機與錄音,去河邊找鬼斗遏。 笑死讼溺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的最易。 我是一名探鬼主播怒坯,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藻懒!你這毒婦竟也來了剔猿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤嬉荆,失蹤者是張志新(化名)和其女友劉穎归敬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鄙早,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡汪茧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了限番。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱污。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弥虐,靈堂內(nèi)的尸體忽然破棺而出扩灯,到底是詐尸還是另有隱情,我是刑警寧澤霜瘪,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布珠插,位于F島的核電站,受9級特大地震影響颖对,放射性物質(zhì)發(fā)生泄漏捻撑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顾患。 院中可真熱鬧琳拭,春花似錦、人聲如沸描验。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膘流。三九已至絮缅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呼股,已是汗流浹背耕魄。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彭谁,地道東北人吸奴。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像缠局,于是被迫代替她去往敵國和親则奥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容