リテラル

  1. ここでの問題は、右側の値がintに収まらないほど大きすぎる点だ。整数リテラルの規則によると、その型はlongとなる。そのため、左側の変数の型に合わない。少なくとも2つの解決策がある。

    1つは、autoキーワードを使用して、変数の型をコンパイラに任せる方法だ。

    auto amount = 10_000_000_000;
    D

    amountの型は、右辺の初期値からlongと推測される。

    もう1つの解決策は、変数の型もlongにする方法である。

    long amount = 10_000_000_000;
    D
  2. 行の先頭に表示する特別な文字"'\r'"を利用することができる。
    import std.stdio;
    
    void main() {
        for (int number = 0; ; ++number) {
            write("\rNumber: ", number);
        }
    }
    D
    literals.solution.1

    このプログラムの出力は、出力バッファとの相互作用により不安定になる可能性がある。次のプログラムは、出力バッファをフラッシュし、各書き込み後に10ミリ秒待機する:

    import std.stdio;
    import core.thread;
    
    void main() {
        for (int number = 0; ; ++number) {
            write("\rNumber: ", number);
            stdout.flush();
            Thread.sleep(10.msecs);
        }
    }
    D
    literals.solution.2

    出力のフラッシュは通常必要ない。なぜなら、writelnによって次の行に進む前に、またはstdinから読み込む前に自動的にフラッシュされるからだ。