std.regex
はモジュールであるため、純粋としてマークすることはできません。
Aへの回答:
マーク機能pure
は純粋ではありません。それはあなたがそれを純粋にしたいことをコンパイラーに伝えるだけであり、関数が本当に純粋にされることができればそれは仕事をします。純粋にできない場合、コンパイラはエラーを発生させます。これがここに当てはまります-test()は純粋でstd.regex.regex()
はないため、純粋にすることはできません。経験則-純粋関数は不純な関数を呼び出すことはできません。
Bへの回答:
はい、もっと深い理由があります。おそらくあなたはすでにそれらを知っていると思います。注意として、 http://en.wikipedia.org/wiki/Pure_functionを読んで、関数test()
がこれら2つの主要なルールを満たしているかどうかを自問してください。このためには、当然、std.regex.regex()関数のセマンティクスを理解する必要があります。
おそらくあなたは質問したかったのでしょうなぜstd.regex.regex()は純粋ではないのですか?
マットはすでにその質問に答えたと思います。--std.regexモジュールは確かにいくつかのキャッシュを維持し、それを変更します。