// * D #contents * auto - 変数宣言で使うとスコープアウトでデストラクタが呼ばれる - クラス宣言で使うとautoでしか宣言できなくできる * Cと文字列 import std.string; char[] s; toStringz(s); \0で終わる char *を返す。~ 旧 toCharz。 * 配列 ** .sizeと.length - .length 配列の長さ - .size 使用バイト数(よく見たら非推奨だった)~ .sizeof~ 動的配列だと .sizeof は参照なので固定の値 ハマった・・・ ** 初期化子 staticな変数でないと使えない ** スライス 中の値は元の配列の参照。 * 正規表現 ** マッチした位置の取得 RegExp re = new RegExp(`[0-9]+`,null); char src[] = "2005/04/23"; for (bit isFirst=true; ; isFirst=false) { int result = isFirst ? re.test(src) : re.test(); if (!result) break; int start = re.pmatch[0].rm_so; int end = re.pmatch[0].rm_eo; printf("%s: %d - %d\n", toStringz(src[start..end]), start, end); } publicではないpmatchを使う違法くさいコード。 * 整数除算 負の数を正の数で割ると怪しい。(v0.121) * 静的メソッドとファイル名 v0.122 // Foo.d class Foo { static void method() {}; } // bar.d class Bar { static void method() {}; } import Foo; import bar; // エラー // Fooをクラス名としてみてない Foo.method(); // 成功 Bar.method(); ファイル名とクラス名は一致させるなってことですか? * import // A.d private import C; // B.d public import C; - AをインポートしてもCは使えない - BをインポートするとCも使える -- デフォルトはこっち * stdin と readLine と ReadException v0.122 while (!stdin.eof()) { char c; stdin.read(c); text ~= c; } 上のようなコードで標準入力からchar[]に読み込もうとすると ReadException が投げられる。~ eof()が機能していない。~ .seekable が false だと eof()が機能しないため。~ stdin のところが Fileのインスタンスだったりすると .seekable が true なのですんなり動く。~ readLine()がstdinでも普通に動くのは、このメソッドの中は ReadException を catchするようになっているから。~ 結論、stdin と Streamは同じようには扱えない。 try { while (!stdin.eof()) { char c; stdin.read(c); text ~= c; } } catch (ReadException e) { if (!stdin.eof()) throw e; } readLine() 式の解決法。~ 例外が飛ぶ頃には EOF に達したというフラグが立っている。~ Streamもこれで扱えるので一応同じ扱いはできますが・・・なんかねぇ。~ * yaneSDK4D - -dをつけないとキャストで怒られる - floatをintに変換できないといって怒られる -- y4d_draw/drawcontext.d -- y4d_draw/fontrepository.d -- y4d_draw/scenariodraw.d -- など - key in aaray を bitに変換できなくなったらしい -- (key in aaray) != null で - uintで-1はキャストしないと怒られる - makefileよりMakefile.yaneSDK4D.linux -- dmdのところを書き換え -- lib〜.a を .libに -- .o は .objに -- debugをreleaseに - .size は .sizeofに