質問編集履歴

1

質問の主旨がはっきりしていないようなので、追記した。

2020/11/29 07:03

投稿

moriman
moriman

スコア615

test CHANGED
File without changes
test CHANGED
@@ -111,3 +111,45 @@
111
111
  どこか他の場所でList<E>クラスとListIterable<E>クラスの関係性を示すコードがあるのでしょうか?
112
112
 
113
113
  それともこのコードでList<E>クラスのインスタンスのiteratorプロパティは適切に初期化されるのでしょうか?
114
+
115
+
116
+
117
+ 2020/11/29/15:30追記
118
+
119
+ 質問の主旨なのですが、
120
+
121
+
122
+
123
+ iterable、iteratorなどの基本を学ぶ中で、
124
+
125
+
126
+
127
+ リストリテラルなどで生成したList<E>型のインスタンスがfor-inループでイテレートできる以上、List<E>インスタンス内のiteratorプロパティに有効なIterator<E>(あるいはそのサブクラス)のインスタンスがセットされているはずなので、それをソースコードで確認したい、
128
+
129
+
130
+
131
+ という考えが発生しました。
132
+
133
+ それを確認するためにソースコードのどこを見れば良いか、ということが質問の主旨です。
134
+
135
+ リストリテラルで生成されるリストがList<E>型のコンストラクタで生成されるとすると、
136
+
137
+
138
+
139
+ 結局List<E>クラスのコンストラクタが、(toast-uz様にお示し頂いた)Iterable.generate()コンストラクタを呼び出しているなら、
140
+
141
+ ListIterableのサブクラスが生成されるので、全てつながると思うのですが、
142
+
143
+ List<E>クラスのコンストラクタを見ると
144
+
145
+ ```ここに言語を入力
146
+
147
+ external factory List.filled(int length, E fill, {bool growable = false});
148
+
149
+ ```
150
+
151
+ のようにコンストラクタは全てexternal修飾子がついていて、ボディが記述されていないようです。
152
+
153
+ externalというのは、メソッド(コンストラクタ)のボディは別の場所で定義されている、ということらしいのですが、
154
+
155
+ その場所ってどこなのでしょうか?