- 追加された行はこの色です。
- 削除された行はこの色です。
// * D
#ls2
#contents
- http://www.dsource.org/
* 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もこれで扱えるので一応同じ扱いはできますが・・・なんかねぇ。~
* Linuxでdmd
unzip dmd.zip dmc.zip
sudo mv dmd dm /usr/local/
cd /usr/local/dmd/bin/
chmod +x dmd dumpobj obj2asm
sudo mv dmd dumpobj obj2asm /usr/local/bin/
sudo mv ../lib/libphobos.a /usr/lib/
# dmd.conf 編集
sudo mv dmd.conf /etc/
dmd.conf
[Environment]
DFLAGS=-I/usr/local/dmd/src/phobos
* return文がない場合
Error: AssertError Failure ファイル名(メソッドの終わりの行番号)
~-debugでないとassertすらないらしい。~
参照: http://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-04.html#042300000000
実行時エラーです
* module in multiple defined
v0.123
src\color\converter\converter.d(1): module color is in multiple defined
color/converter/converter.d での import color.color; がエラーに~
color/color.d の先頭に module color.color; を加えるとエラー回避。~
他のところではmodule宣言なしでも何も言われないのだが、はて・・・?~
パッケージ名とモジュール名が同一だからですか?
* 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に