クラス XRange

組み込み型 xrange は(組み込み関数 range() が List を返すのと違って)ジェネレーターを生成するので、ループ処理の効率化が期待できます。クラス XRange は、この xrange に相当します。すると、次のような構造が見えてきます。


XRange xr = seq as XRange;
if (xr != null) {
... // 引数に xrange() を指定した
}
return fromkeysAny(cls, seq, value);

if に続く条件式 xr != null が成立するなら、クラス XRange で規定したプロトコルに従って処理します。これは、メソッド呼び出し dict.fromkeys(S,v) の実引数 S に xrange() を指定した場合に相当します。それ以外は、補助関数 fromkeysAny に処理を委ねます。さらに if ブロックの本体では、次のような構造が見えてきます。


int n = xr.GetLength();
...
for (int i = 0; i < n; i++) {
... xr[i] ...
}

添字 i を使って、組み込み型 xrange の各要素 xr[i] を順に処理します。