Skip to content

Commit

Permalink
Merge pull request #198 from chengr4/correct-translation
Browse files Browse the repository at this point in the history
Correct translation
  • Loading branch information
weihanglo authored Feb 9, 2024
2 parents 3818188 + 9b1866e commit 456d458
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/ch19-05-macros.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

一個函式簽名必須宣告該函式需要的參數型別與數量。反觀巨集可以接收變動數量的參數:我們可以用一個參數呼叫 `println!("hello")` ,也可以是兩個參數的 `println!("hello {}", name)`。另外,巨集會在編譯器開始翻譯程式碼的意義之前展開。例如可以使用巨集實作一個特徵。這種事函式便無法做到,因為函式會在執行期呼叫,而特徵需要在編譯期就實作。

選擇實作巨集而不用函式也有缺點,巨集的定義比函式更加複雜,因為你是在寫 Rust 的程式碼。就是因為這種間接迂迴的關係,一般情況下,相較於函式來說巨集的定義都更加難以閱讀、理解與維護。
選擇實作巨集而不用函式也有缺點,巨集的定義比函式更加複雜,因為你是在寫 Rust 的程式碼來生成 Rust 的程式碼。就是因為這種間接迂迴的關係,一般情況下,相較於函式來說巨集的定義都更加難以閱讀、理解與維護。

另一個巨集和函式之間的重要的的差異,在一個檔案中想呼叫巨集,必須在作用域(scope)內定義或是將巨集帶到這個作用域,而反過來函式可以在任何地方定義與呼叫。
另一個巨集和函式之間的重要差異,在一個檔案中想呼叫巨集,必須在作用域(scope)內定義或是將巨集帶到這個作用域,而反過來函式可以在任何地方定義與呼叫。

### 使用 `macro_rules!` 宣告式巨集做普通的超程式設計

Expand All @@ -30,7 +30,7 @@ Rust 中最廣泛使用的巨集形式非**宣告式巨集**莫屬。這種巨
let v: Vec<u32> = vec![1, 2, 3];
```

我們也可利用 `vec!` 巨集產生兩個整數的向量或是五個字串的 切片。因為不能預先得知這些值的數量,所以我們無法透過函式做到這件事。
我們也可利用 `vec!` 巨集產生兩個整數的向量或是五個字串的切片。因為不能預先得知這些值的數量,所以我們無法透過函式做到這件事。

範例 19-28 展示了稍微簡化過的 `vec!` 巨集定義。

Expand Down

0 comments on commit 456d458

Please sign in to comment.