タプルパラメタとtemplate

一つ前の記事で書いたScannerだけど,templateが共用でもないのに外に出てるのが気持ち悪かったのでclass内に移してみたら,コンパイルが通らなくなった.templateでのこの辺のエラーって有名なのかな?.

エラーになる時

コード例で言うとactionがタプルパラメタになるわけだけど,これを直接使う場合は,templateがclass内になるとコンパイルエラーになる.また,templateの引数にaction.lengthとして長さを渡そうとしても何故かlengthが未定義と言われてコンパイル出来ない.

エラーにならない時

action.length.stringofだとちゃんと長さが文字列で返される.また,action[0..$].lengthとやるとtemplateにも長さを渡すことができる.

まとめ

ということで,templateをactionのスライスで再帰するんじゃなくて,action[0..$].lengthで長さを渡す方法にして,class内に収めることが出来た.