Skip to content

Commit

Permalink
Merge pull request #177 from jcplist/zh_tw
Browse files Browse the repository at this point in the history
Fix typo for ch19-01 and ch19-02
  • Loading branch information
CYBAI authored Jul 24, 2023
2 parents f71a1c3 + 21c7433 commit 805422d
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/ch19-01-unsafe-rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ Rust 的借用檢查器(borrow checker)不能理解我們同時借用一個

有些時候,你的 Rust 程式碼可能需要與其他語言撰寫的程式碼互動。這種情況 Rust 提供 `extern` 關鍵字,予以協助建立與使用**外部函式介面(Foreign Function Interface,FFI)** 。FFI 的功能是給在一門程式語言定義函式,使得另一門(外部)程式語言可以呼叫這些函式。

範例 19-8 展示了如何建立整合一個 C 標準函式庫的 `abc` 函式。由於其他語言並無強制遵守 Rust 的規則和保證,而且 Rust 也無法檢查之,因此在 Rust 程式碼中呼叫在 `extern` 區塊內宣告的函式一定是不安全的操作,所以確保安全的重責大任就會落在程式設計師身上。
範例 19-8 展示了如何建立整合一個 C 標準函式庫的 `abs` 函式。由於其他語言並無強制遵守 Rust 的規則和保證,而且 Rust 也無法檢查之,因此在 Rust 程式碼中呼叫在 `extern` 區塊內宣告的函式一定是不安全的操作,所以確保安全的重責大任就會落在程式設計師身上。

<span class="filename">檔案名稱:src/main.rs</span>

Expand Down
2 changes: 1 addition & 1 deletion src/ch19-02-advanced-traits.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ Rust 並沒有限制不同特徵之間不能有同名的方法,也沒有阻止

### 使用新型別模式替外部型別實作外部特徵

在第十章[「為型別實作特徵」][對型別實作特徵]一節中,我們提及孤兒規則(orphah rule),這個規則指出只要型別或特徵其一是在本地的 crate 中定義,就允許我們對該型別實作該特徵。使用**新型別模式(newtype pattern)**,即可繞過這項規則,此模式涉及建立一個元組結構體(tuple struct)型別(我們在[「使用無名稱欄位的元組結構體來建立不同型別」][元組結構體]說明了元組結構體)。元組結構體包含一個欄位,在我們想要實作該特徵的型別外作一層薄薄的封裝。這封裝型別對 crate 來說算作在本地定義,因此可以對該封裝實作該特徵。**新型別**是一個源自 Haskell 程式語言的術語。使用此模式不會有任何執行時效能的耗損,這個封裝型別會在編譯期刪略。
在第十章[「為型別實作特徵」][對型別實作特徵]一節中,我們提及孤兒規則(orphan rule),這個規則指出只要型別或特徵其一是在本地的 crate 中定義,就允許我們對該型別實作該特徵。使用**新型別模式(newtype pattern)**,即可繞過這項規則,此模式涉及建立一個元組結構體(tuple struct)型別(我們在[「使用無名稱欄位的元組結構體來建立不同型別」][元組結構體]說明了元組結構體)。元組結構體包含一個欄位,在我們想要實作該特徵的型別外作一層薄薄的封裝。這封裝型別對 crate 來說算作在本地定義,因此可以對該封裝實作該特徵。**新型別**是一個源自 Haskell 程式語言的術語。使用此模式不會有任何執行時效能的耗損,這個封裝型別會在編譯期刪略。

舉個例子,我們想要對 `Vec<T>` 實作 `Display`,但孤兒規則限制我們不能這樣做,因為 `Display` 特徵與 `Vec<T>` 都是在我們的 crate 之外定義。我們可以建立一個 `Wrapper` 結構體,帶有一個 `Vec<T>` 實例,接下來再對 `Wrapper` 實作 `Display` 並使用 `Vec<T>` 之值,如範例 19-23 所示。

Expand Down

0 comments on commit 805422d

Please sign in to comment.