1
1
<!-- ## Appendix C: Derivable Traits -->
2
2
3
- ## 付録C: 継承可能なトレイト
3
+ ## 付録C: 導出可能なトレイト
4
4
5
5
<!-- In various places in the book, we’ve discussed the `derive` attribute, which -->
6
6
<!-- you can apply to a struct or enum definition. The `derive` attribute generates -->
21
21
<!-- * The conditions in which you’re allowed or not allowed to implement the trait -->
22
22
<!-- * Examples of operations that require the trait -->
23
23
24
- * このトレイトを継承する演算子やメソッドで可能になること
24
+ * このトレイトを導出する演算子やメソッドで可能になること
25
25
* ` derive ` が提供するトレイトの実装がすること
26
26
* トレイトを実装することが型についてどれほど重要か
27
27
* そのトレイトを実装できたりできなかったりする条件
50
50
<!-- would be most relevant to them? The Rust compiler doesn’t have this insight, so -->
51
51
<!-- it can’t provide appropriate default behavior for you. -->
52
52
53
- 継承できないトレイトの例は ` Display ` で、これはエンドユーザ向けのフォーマットを扱います。常に、エンドユーザ向けに型を表示する適切な方法について、
53
+ 導出できないトレイトの例は ` Display ` で、これはエンドユーザ向けのフォーマットを扱います。常に、エンドユーザ向けに型を表示する適切な方法について、
54
54
考慮すべきです。型のどの部分をエンドユーザは見ることができるべきでしょうか?どの部分を関係があると考えるでしょうか?
55
55
どんな形式のデータがエンドユーザにとって最も関係があるでしょうか?Rustコンパイラには、
56
56
この見識がないため、適切な既定動作を提供してくれないのです。
60
60
<!-- traits you can use `derive` with truly open-ended. Implementing `derive` -->
61
61
<!-- involves using a procedural macro, which is covered in Appendix D. -->
62
62
63
- この付録で提供される継承可能なトレイトのリストは 、包括的ではありません: ライブラリは、自身のトレイトに` derive ` を実装でき、
63
+ この付録で提供される導出可能なトレイトのリストは 、包括的ではありません: ライブラリは、自身のトレイトに` derive ` を実装でき、
64
64
` derive ` と共に使用できるトレイトのリストが実に限りのないものになってしまうのです。` derive ` の実装には、
65
65
プロシージャルなマクロが関連します。マクロについては、付録Dで講義します。
66
66
103
103
<!-- instances are not equal if any fields are not equal. When derived on enums, -->
104
104
<!-- each variant is equal to itself and not equal to the other variants. -->
105
105
106
- ` PartialEq ` を継承すると 、` eq ` メソッドを実装します。構造体に` PartialEq ` を継承すると 、
106
+ ` PartialEq ` を導出すると 、` eq ` メソッドを実装します。構造体に` PartialEq ` を導出すると 、
107
107
* 全* フィールドが等しい時のみ2つのインスタンスは等価になり、いずれかのフィールドが等価でなければ、
108
- インスタンスは等価ではなくなります。enumに継承すると 、各列挙子は、自身には等価ですが、他の列挙子には等価ではありません。
108
+ インスタンスは等価ではなくなります。enumに導出すると 、各列挙子は、自身には等価ですが、他の列挙子には等価ではありません。
109
109
110
110
<!-- The `PartialEq` trait is required, for example, with the use of the -->
111
111
<!-- `assert_eq!` macro, which needs to be able to compare two instances of a type -->
151
151
<!-- point value. Calling `partial_cmp` with any floating point number and the `NaN` -->
152
152
<!-- floating point value will return `None`. -->
153
153
154
- ` PartialOrd ` を継承すると 、` partial_cmp ` メソッドを実装し、これは、与えられた値が順序付けられない時に` None ` になる` Option<Ordering> ` を返します。
154
+ ` PartialOrd ` を導出すると 、` partial_cmp ` メソッドを実装し、これは、与えられた値が順序付けられない時に` None ` になる` Option<Ordering> ` を返します。
155
155
その型のほとんどの値は比較できるものの、順序付けできない値の例として、非数字(` NaN ` )浮動小数点値が挙げられます。
156
156
` partial_cmp ` をあらゆる浮動小数点数と` NaN ` 浮動小数点数で呼び出すと、` None ` が返るでしょう。
157
157
160
160
<!-- definition. When derived on enums, variants of the enum declared earlier in the -->
161
161
<!-- enum definition are considered less than the variants listed later. -->
162
162
163
- 構造体に継承すると 、フィールドが構造体定義で現れる順番で各フィールドの値を比較することで2つのインスタンスを比較します。
164
- enumに継承すると 、enum定義で先に定義された列挙子が、後に列挙された列挙子よりも小さいと考えられます。
163
+ 構造体に導出すると 、フィールドが構造体定義で現れる順番で各フィールドの値を比較することで2つのインスタンスを比較します。
164
+ enumに導出すると 、enum定義で先に定義された列挙子が、後に列挙された列挙子よりも小さいと考えられます。
165
165
166
166
<!-- The `PartialOrd` trait is required, for example, for the `gen_range` method -->
167
167
<!-- from the `rand` crate that generates a random value in the range specified by a -->
@@ -180,8 +180,8 @@ enumに継承すると、enum定義で先に定義された列挙子が、後に
180
180
` Ord ` トレイトにより、注釈した型のあらゆる2つの値に対して、合法な順序付けが行えることがわかります。
181
181
` Ord ` トレイトは` cmp ` メソッドを実装し、これは、常に合法な順序付けが可能なので、` Option<Ordering> ` ではなく、
182
182
` Ordering ` を返します。` PartialOrd ` と` Eq ` (` Eq ` は` PartialEq ` も必要とします)も実装している型にしか、
183
- ` Ord ` トレイトを適用することはできません。構造体とenumで継承したら 、` PartialOrd ` で、
184
- ` partial_cmp ` の継承した実装と同じように ` cmp ` は振る舞います。
183
+ ` Ord ` トレイトを適用することはできません。構造体とenumで導出したら 、` PartialOrd ` で、
184
+ ` partial_cmp ` の導出した実装と同じように ` cmp ` は振る舞います。
185
185
186
186
<!-- An example of when `Ord` is required is when storing values in a `BTreeSet<T>`, -->
187
187
<!-- a data structure that stores data based on the sort order of the values. -->
@@ -206,8 +206,8 @@ enumに継承すると、enum定義で先に定義された列挙子が、後に
206
206
<!-- whole type, calls `clone` on each of the parts of the type. This means all the -->
207
207
<!-- fields or values in the type must also implement `Clone` to derive `Clone`. -->
208
208
209
- ` Clone ` を継承すると 、` clone ` メソッドを実装し、これは型全体に対して実装されると、
210
- 型の各部品に対して` clone ` を呼び出します。要するに、` Clone ` を継承するには 、
209
+ ` Clone ` を導出すると 、` clone ` メソッドを実装し、これは型全体に対して実装されると、
210
+ 型の各部品に対して` clone ` を呼び出します。要するに、` Clone ` を導出するには 、
211
211
型のフィールドと値全部も` Clone ` を実装していなければならないということです。
212
212
213
213
<!-- An example of when `Clone` is required is when calling the `to_vec` method on a -->
@@ -239,7 +239,7 @@ enumに継承すると、enum定義で先に定義された列挙子が、後に
239
239
<!-- type that implements `Copy` has a trivial implementation of `Clone` that -->
240
240
<!-- performs the same task as `Copy`. -->
241
241
242
- 部品すべてが` Copy ` を実装する任意の型に対して` Copy ` を継承することができます 。` Clone ` も実装する型に対してのみ、
242
+ 部品すべてが` Copy ` を実装する任意の型に対して` Copy ` を導出することができます 。` Clone ` も実装する型に対してのみ、
243
243
` Copy ` トレイトを適用することができます。何故なら、` Copy ` を実装する型には、
244
244
` Copy ` と同じ作業を行う` Clone ` の<ruby >瑣末<rp >(</rp ><rt >さまつ</rt ><rp >)</rp ></ruby >な実装があるからです。
245
245
@@ -267,8 +267,8 @@ enumに継承すると、enum定義で先に定義された列挙子が、後に
267
267
<!-- meaning all fields or values must also implement `Hash` to derive `Hash`. -->
268
268
269
269
` Hash ` トレイトにより、任意のサイズの型のインスタンスを取り、そのインスタンスをハッシュ関数で固定サイズの値にマップできます。
270
- ` Hash ` を継承すると 、` hash ` メソッドを実装します。` hash ` の継承された実装は 、
271
- 型の各部品に対して呼び出した` hash ` の結果を組み合わせます。つまり、` Hash ` を継承するには 、
270
+ ` Hash ` を導出すると 、` hash ` メソッドを実装します。` hash ` の導出された実装は 、
271
+ 型の各部品に対して呼び出した` hash ` の結果を組み合わせます。つまり、` Hash ` を導出するには 、
272
272
全フィールドと値も` Hash ` を実装しなければならないということです。
273
273
274
274
<!-- An example of when `Hash` is required is in storing keys in a `HashMap<K, V>` -->
@@ -286,9 +286,9 @@ enumに継承すると、enum定義で先に定義された列挙子が、後に
286
286
<!-- meaning all fields or values in the type must also implement `Default` to -->
287
287
<!-- derive `Default.` -->
288
288
289
- ` Default ` トレイトにより、型に対して既定値を生成できます。` Default ` を継承すると 、` default ` 関数を実装します。
290
- ` default ` 関数の継承された実装は 、型の各部品に対して` default ` 関数を呼び出します。つまり、
291
- ` Default ` を継承するには 、型の全フィールドと値も` Default ` を実装しなければならないということです。
289
+ ` Default ` トレイトにより、型に対して既定値を生成できます。` Default ` を導出すると 、` default ` 関数を実装します。
290
+ ` default ` 関数の導出された実装は 、型の各部品に対して` default ` 関数を呼び出します。つまり、
291
+ ` Default ` を導出するには 、型の全フィールドと値も` Default ` を実装しなければならないということです。
292
292
293
293
<!-- The `Default::default` function is commonly used in combination with the struct -->
294
294
<!-- update syntax discussed in the “Creating Instances From Other Instances With -->
0 commit comments