回答編集履歴

1

説明を少し追加しました

2020/06/24 01:00

投稿

tatsuya6502
tatsuya6502

スコア2046

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