回答編集履歴
1
説明を少し追加しました
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
|
54
54
|
|
55
|
-
一方、`|x| func_a(x)`は具体的な型を持ちます。もしこれがコンパイルできたとすると、`new()`の戻り値は`Worker<具体的な一つの型>`になり、`Self`と矛盾してしまいます。
|
55
|
+
一方、`|x| func_a(x)`は具体的な型を持ちます。もしこれがコンパイルできたとすると、`new()`の戻り値は`Worker<具体的な一つの型>`になり、`Self`と矛盾してしまいます。そのため型不一致のエラーE0308になるわけです。
|
56
56
|
|
57
57
|
|
58
58
|
|
@@ -100,6 +100,10 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
+
`Worker`構造体の`func`フィールドの型を、ジェネリクスの型パラメータではなく、具体的な型にします。
|
104
|
+
|
105
|
+
|
106
|
+
|
103
107
|
`|x| func_a(x)`は具体的な型を持ちますが、コンパイラが内部的に作成する匿名型なので、ソースコードで型を指定することはできません。
|
104
108
|
|
105
109
|
|
@@ -128,7 +132,7 @@
|
|
128
132
|
|
129
133
|
Self {
|
130
134
|
|
131
|
-
// 自由変数を持たないクロージャは関数ポインタ型に型強制できる
|
135
|
+
// 自由変数を持たないクロージャは関数ポインタ型に型強制できる
|
132
136
|
|
133
137
|
func: |x| func_a(x),
|
134
138
|
|