From f22e96c9850f043dfaa8fd01a375927be013cc50 Mon Sep 17 00:00:00 2001 From: "Tatsuya Kawano (Circle CI)" Date: Sat, 25 Jun 2016 13:19:37 +0800 Subject: [PATCH 1/4] Update Associated Types to 1.9 --- 1.9/ja/book/associated-types.md | 31 +++++++++-------- .../src/doc/book/associated-types.md | 34 ------------------- 2 files changed, 16 insertions(+), 49 deletions(-) delete mode 100644 diff-1.6.0..1.9.0/src/doc/book/associated-types.md diff --git a/1.9/ja/book/associated-types.md b/1.9/ja/book/associated-types.md index 2659b314..5e0f5d6d 100644 --- a/1.9/ja/book/associated-types.md +++ b/1.9/ja/book/associated-types.md @@ -32,8 +32,8 @@ fn distance>(graph: &G, start: &N, end: &N) -> u32 { ... } ``` - -この距離を計算する関数distanceは、辺の型に関わらず動作します、そのためシグネチャに含まれる `E` に関連する部分は邪魔でしかありません。 + +この距離を計算する関数distanceは、辺の型に関わらず動作します、そのためシグネチャに含まれる `E` に関連する部分は邪魔となります。 @@ -52,7 +52,7 @@ trait Graph { ``` -このようにすると、`Graph` を使った関数は以下のように書くことができます: +このようにすると、`Graph` を使った関数は以下のように書けます: ```rust,ignore fn distance(graph: &G, start: &G::N, end: &G::N) -> u32 { ... } @@ -61,7 +61,6 @@ fn distance(graph: &G, start: &G::N, end: &G::N) -> u32 { ... } もう `E` について扱う必要はありません! - もっと詳しく見ていきましょう。 @@ -89,7 +88,7 @@ trait Graph { これらの `type` 宣言は、関数で利用できるものと同じものが全て利用できます。 -たとえば、 `N` 型が `Display` を実装していて欲しい時、つまり私達が頂点を出力したい時、以下のようにして指定することができます: +たとえば、 `N` 型が `Display` を実装していて欲しい時、つまり私達が頂点を出力したい時、以下のようにして指定できます: ```rust use std::fmt; @@ -141,14 +140,14 @@ impl Graph for MyGraph { - + -この奇妙な実装は、つねに `true` と空の `Vec` を返しますが、どのように定義したら良いかのアイデアをくれます。 +この奇妙な実装は、常に `true` と空の `Vec` を返しますが、どのように定義したら良いかのアイデアをくれます。 まず、はじめに3つの `struct` が必要です、ひとつはグラフのため、そしてひとつは頂点のため、そしてもうひとつは辺のため。 -もし異なる型を利用することが適切ならば、そのようにすると良いでしょう、今回はこの3つの `struct` を用います。 - +もし異なる型を利用することが適切ならば、そのようにすると良いでしょう。 +今回はこの3つの `struct` を用います。 - + 次は `impl` の行です、これは他のトレイトを実装するときと同様です。 @@ -163,9 +162,9 @@ impl Graph for MyGraph { ## 関連型を伴うトレイト - -すこし触れておきたい構文: トレイトオブジェクト が有ります。 -もし、トレイトオブジェクトを以下のように関連型から作成しようとした場合: + +すこし触れておきたい構文: トレイトオブジェクト があります。 +もし、トレイトオブジェクトを以下のように関連型を持つトレイトから作成しようとした場合: ```rust,ignore # trait Graph { @@ -207,7 +206,8 @@ let obj = Box::new(graph) as Box; -上のようにしてトレイトオブジェクトを作ることはできません、なぜなら関連型について知らないからです +上のようにしてトレイトオブジェクトを作ることはできません。 +なぜなら関連型について知らないからです。 代わりに以下のように書くことができます: ```rust @@ -237,5 +237,6 @@ let obj = Box::new(graph) as Box>; -`N=Node` 構文を用いて型パラメータ `N` にたいして具体的な型 `Node` を指定することができます、`E=Edge` についても同様です。 +`N=Node` 構文を用いて型パラメータ `N` に対して具体的な型 `Node` を指定できます。 +`E=Edge` についても同様です。 もしこの制約を指定しなかった場合、このトレイトオブジェクトに対してどの `impl` がマッチするのか定まりません。 diff --git a/diff-1.6.0..1.9.0/src/doc/book/associated-types.md b/diff-1.6.0..1.9.0/src/doc/book/associated-types.md deleted file mode 100644 index 5f485390..00000000 --- a/diff-1.6.0..1.9.0/src/doc/book/associated-types.md +++ /dev/null @@ -1,34 +0,0 @@ ---- a/src/doc/book/associated-types.md -+++ b/src/doc/book/associated-types.md -@@ -24,7 +24,7 @@ fn distance>(graph: &G, start: &N, end: &N) -> u32 { ... } - ``` - - Our distance calculation works regardless of our `Edge` type, so the `E` stuff in --this signature is just a distraction. -+this signature is a distraction. - - What we really want to say is that a certain `E`dge and `N`ode type come together - to form each kind of `Graph`. We can do that with associated types: -@@ -118,10 +118,10 @@ impl Graph for MyGraph { - This silly implementation always returns `true` and an empty `Vec`, but it - gives you an idea of how to implement this kind of thing. We first need three - `struct`s, one for the graph, one for the node, and one for the edge. If it made --more sense to use a different type, that would work as well, we’re just going to -+more sense to use a different type, that would work as well, we’re going to - use `struct`s for all three here. - --Next is the `impl` line, which is just like implementing any other trait. -+Next is the `impl` line, which is an implementation like any other trait. - - From here, we use `=` to define our associated types. The name the trait uses - goes on the left of the `=`, and the concrete type we’re `impl`ementing this -@@ -131,7 +131,7 @@ declarations. - ## Trait objects with associated types - - There’s one more bit of syntax we should talk about: trait objects. If you --try to create a trait object from an associated type, like this: -+try to create a trait object from a trait with an associated type, like this: - - ```rust,ignore - # trait Graph { -diff --git a/src/doc/book/bibliography.md b/src/doc/book/bibliography.md From 1317d155855252d5feebdcba2edd39cbb040f6cd Mon Sep 17 00:00:00 2001 From: "Tatsuya Kawano (Circle CI)" Date: Tue, 28 Feb 2017 18:42:19 +0800 Subject: [PATCH 2/4] Brush up translation for Associated Types (1.9) --- 1.9/ja/book/associated-types.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/1.9/ja/book/associated-types.md b/1.9/ja/book/associated-types.md index 5e0f5d6d..cdf9bc9b 100644 --- a/1.9/ja/book/associated-types.md +++ b/1.9/ja/book/associated-types.md @@ -7,8 +7,8 @@ -関連型は、Rust型システムの強力な部分です。関連型は、「型族」という概念と関連が有り、 -言い換えると、複数の型をグループ化するものです。 +関連型は、Rust型システムの強力な部分です。 +関連型は、「型族」という概念と関連があり、言い換えると、複数の型をグループ化するものです。 この説明はすこし抽象的なので、実際の例を見ていきましょう。 例えば、 `Graph` トレイトを定義したいとしましょう、このときジェネリックになる2つの型: 頂点の型、辺の型 が存在します。 そのため、以下のように `Graph` と書きたくなるでしょう: @@ -33,12 +33,12 @@ fn distance>(graph: &G, start: &N, end: &N) -> u32 { ... } -この距離を計算する関数distanceは、辺の型に関わらず動作します、そのためシグネチャに含まれる `E` に関連する部分は邪魔となります。 +この距離を計算する関数distanceは、辺の型に関わらず動作します、そのためシグネチャに含まれる `E` に関連する部分は邪魔になります。 本当に表現したいことは、それぞれのグラフ( `Graph` )は辺( `E` )や頂点( `N` )で構成されているということです。 -それは、以下のように関連型を用いて表現することができます: +それは、以下のように関連型を用いて表現できます: ```rust trait Graph { @@ -59,7 +59,7 @@ fn distance(graph: &G, start: &G::N, end: &G::N) -> u32 { ... } ``` -もう `E` について扱う必要はありません! +もう `E` について扱う必要はありません! もっと詳しく見ていきましょう。 @@ -163,7 +163,7 @@ impl Graph for MyGraph { -すこし触れておきたい構文: トレイトオブジェクト があります。 +すこし触れておきたい構文のひとつに、トレイトオブジェクトがあります。 もし、トレイトオブジェクトを以下のように関連型を持つトレイトから作成しようとした場合: ```rust,ignore From 2ddd2ca93cf1b3eb38911e388ea79cef753616a3 Mon Sep 17 00:00:00 2001 From: "Tatsuya Kawano (Circle CI)" Date: Tue, 28 Feb 2017 19:30:21 +0800 Subject: [PATCH 3/4] Brush up the translation of Associated Types (1.9) --- 1.9/ja/book/associated-types.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/1.9/ja/book/associated-types.md b/1.9/ja/book/associated-types.md index cdf9bc9b..1a3fddff 100644 --- a/1.9/ja/book/associated-types.md +++ b/1.9/ja/book/associated-types.md @@ -25,7 +25,7 @@ trait Graph { たしかに上のようなコードは動作しますが、この `Graph` の定義は少し扱いづらいです。 -たとえば、任意の `Graph` を引数に取る関数は、 _同時に_ 頂点 `N` と辺 `E` についてもジェネリックとなることになります: +たとえば、任意の `Graph` を引数に取る関数は、 _さらに_ 頂点 `N` と辺 `E` の型についてもジェネリックになる必要があります: ```rust,ignore fn distance>(graph: &G, start: &N, end: &N) -> u32 { ... } @@ -37,7 +37,7 @@ fn distance>(graph: &G, start: &N, end: &N) -> u32 { ... } -本当に表現したいことは、それぞれのグラフ( `Graph` )は辺( `E` )や頂点( `N` )で構成されているということです。 +本当に表現したいのは、それぞれの `Graph` は、辺 `E` と頂点 `N` で構成されていることです。 それは、以下のように関連型を用いて表現できます: ```rust @@ -52,14 +52,14 @@ trait Graph { ``` -このようにすると、`Graph` を使った関数は以下のように書けます: +こうすると、利用者側では、個々の `Graph` をより抽象的なものとして扱えます: ```rust,ignore fn distance(graph: &G, start: &G::N, end: &G::N) -> u32 { ... } ``` -もう `E` について扱う必要はありません! +ここでは、頂点 `E` 型を扱わずに済んでいます! もっと詳しく見ていきましょう。 @@ -82,13 +82,13 @@ trait Graph { -非常にシンプルですね。関連型には `type` キーワードを使い、そしてトレイトの本体や関数で利用します。 +非常にシンプルですね。関連型には `type` キーワードを使い、そしてトレイトの本体にある関数で利用します。 これらの `type` 宣言は、関数で利用できるものと同じものが全て利用できます。 -たとえば、 `N` 型が `Display` を実装していて欲しい時、つまり私達が頂点を出力したい時、以下のようにして指定できます: +たとえば、頂点を表示するために、`N` 型に `Display` を実装してほしい場合は、以下のように指定できます: ```rust use std::fmt; @@ -142,13 +142,15 @@ impl Graph for MyGraph { -この奇妙な実装は、常に `true` と空の `Vec` を返しますが、どのように定義したら良いかのアイデアをくれます。 -まず、はじめに3つの `struct` が必要です、ひとつはグラフのため、そしてひとつは頂点のため、そしてもうひとつは辺のため。 -もし異なる型を利用することが適切ならば、そのようにすると良いでしょう。 +この少し単純すぎる実装は、常に `true` と空の `Vec` を返しますが、どのように定義したら良いかのアイデアをくれます。 +まず、はじめに3つの `struct` が必要です。 +グラフのためにひとつ、頂点のためにひとつ、辺のためにひとつです。 +もし異なる型を利用するのが適切ならば、そうしても構いません。 今回はこの3つの `struct` を用います。 -次は `impl` の行です、これは他のトレイトを実装するときと同様です。 +次は `impl` の行です。 +これは他のトレイトを実装するときと同様です。 @@ -208,7 +210,7 @@ let obj = Box::new(graph) as Box; 上のようにしてトレイトオブジェクトを作ることはできません。 なぜなら関連型について知らないからです。 -代わりに以下のように書くことができます: +代わりに以下のように書けます: ```rust # trait Graph { From 53f5dee1955b0d836340f58382cef45f15f20ee2 Mon Sep 17 00:00:00 2001 From: "Tatsuya Kawano (Circle CI)" Date: Tue, 28 Feb 2017 19:43:29 +0800 Subject: [PATCH 4/4] Brush up the translation of Associated Types (1.9) --- 1.9/ja/book/associated-types.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/1.9/ja/book/associated-types.md b/1.9/ja/book/associated-types.md index 1a3fddff..7e730a7b 100644 --- a/1.9/ja/book/associated-types.md +++ b/1.9/ja/book/associated-types.md @@ -52,7 +52,7 @@ trait Graph { ``` -こうすると、利用者側では、個々の `Graph` をより抽象的なものとして扱えます: +こうすると、使う側では、個々の `Graph` をより抽象的なものとして扱えます: ```rust,ignore fn distance(graph: &G, start: &G::N, end: &G::N) -> u32 { ... } @@ -88,7 +88,7 @@ trait Graph { これらの `type` 宣言は、関数で利用できるものと同じものが全て利用できます。 -たとえば、頂点を表示するために、`N` 型に `Display` を実装してほしい場合は、以下のように指定できます: +たとえば、頂点を表示するため `N` 型には `Display` を実装してほしいなら、以下のように指定できます: ```rust use std::fmt; @@ -142,7 +142,8 @@ impl Graph for MyGraph { -この少し単純すぎる実装は、常に `true` と空の `Vec` を返しますが、どのように定義したら良いかのアイデアをくれます。 +この、いささか単純過ぎる実装では、常に `true` と空の `Vec` を返します。 +しかし、関連型をどう定義したらよいのかを教えてくれます。 まず、はじめに3つの `struct` が必要です。 グラフのためにひとつ、頂点のためにひとつ、辺のためにひとつです。 もし異なる型を利用するのが適切ならば、そうしても構いません。