diff --git a/src/ch19-05-macros.md b/src/ch19-05-macros.md index 43f7394c..4c280777 100644 --- a/src/ch19-05-macros.md +++ b/src/ch19-05-macros.md @@ -16,9 +16,9 @@ 一個函式簽名必須宣告該函式需要的參數型別與數量。反觀巨集可以接收變動數量的參數:我們可以用一個參數呼叫 `println!("hello")` ,也可以是兩個參數的 `println!("hello {}", name)`。另外,巨集會在編譯器開始翻譯程式碼的意義之前展開。例如可以使用巨集實作一個特徵。這種事函式便無法做到,因為函式會在執行期呼叫,而特徵需要在編譯期就實作。 -選擇實作巨集而不用函式也有缺點,巨集的定義比函式更加複雜,因為你是在寫 Rust 的程式碼。就是因為這種間接迂迴的關係,一般情況下,相較於函式來說巨集的定義都更加難以閱讀、理解與維護。 +選擇實作巨集而不用函式也有缺點,巨集的定義比函式更加複雜,因為你是在寫 Rust 的程式碼來生成 Rust 的程式碼。就是因為這種間接迂迴的關係,一般情況下,相較於函式來說巨集的定義都更加難以閱讀、理解與維護。 -另一個巨集和函式之間的重要的的差異,在一個檔案中想呼叫巨集,必須在作用域(scope)內定義或是將巨集帶到這個作用域,而反過來函式可以在任何地方定義與呼叫。 +另一個巨集和函式之間的重要差異,在一個檔案中想呼叫巨集,必須在作用域(scope)內定義或是將巨集帶到這個作用域,而反過來函式可以在任何地方定義與呼叫。 ### 使用 `macro_rules!` 宣告式巨集做普通的超程式設計 @@ -30,7 +30,7 @@ Rust 中最廣泛使用的巨集形式非**宣告式巨集**莫屬。這種巨 let v: Vec = vec![1, 2, 3]; ``` -我們也可利用 `vec!` 巨集產生兩個整數的向量或是五個字串的 切片。因為不能預先得知這些值的數量,所以我們無法透過函式做到這件事。 +我們也可利用 `vec!` 巨集產生兩個整數的向量或是五個字串的切片。因為不能預先得知這些值的數量,所以我們無法透過函式做到這件事。 範例 19-28 展示了稍微簡化過的 `vec!` 巨集定義。