Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

2009-10-01から1ヶ月間の記事一覧

無名メソッドをその場で呼び出す。

無名メソッドは変数に代入したり、関数に渡して使うものだから、その場で呼び出しちゃうってことは一度きりの使い捨て?再利用できなくね?何の意味があるの?という疑問をお持ちの方もいるかもしれないけど、例えばクロージャを作りたい場合なんかは「クロ…

基本の再確認2 CPUの数。

System.pas内にCPUCount変数が宣言されていて、これを参照することでCPUの数が取得できる。中身はGetSystemInfoで取得した値。 2006のソースを見たところまだ存在しなかったので、2009辺りで導入されたのかな?

基本の再確認1 for..in..doあれこれ。

var c: Char; s: string; arr: TArray<string>; begin s := 'Hello, Wahaa world'; for c in s do { 1文字ずつ取り出す }; for c in Copy(s, 8, Length(s)) do { 8文字目から1文字ずつ取り出す }; arr := TArray<string>.Create('Hello', 'Wahaa', 'world'); for s in arr do</string></string>…

定期ゴミ拾いのお知らせ。

レジストリの"HKEY_CURRENT_USER\Software\CodeGear*1\BDS\x.0*2\Globals"内に"CollectGarbageInterval"という文字列値を作って、ミリ秒で時間を指定するとその間隔でIDEで使ってる.NETに対して強制的にGCを発動してくれるみたい。 ガリレオIDE系で有効だと…

拡張識別子。

海外のDelphiブログを色々見てる時に、変数名だか関数名の頭に&記号が付いてるのを(どこでだったか忘れたけど)目にして、さっき何となくヘルプ見たらあれは拡張識別子というものだった。 拡張識別子(というか&演算子)は予約語を識別子としてコンパイラに…

いつの間にか動的配列はCreateできるようになっていた。

type TIntArray = array of Integer; var IntArray: TIntArray; StrArray: TArray<string>; begin IntArray := TIntArray.Create(2, 3, 5, 7, 11,); // [2, 3, 5, 7, 11] StrArray := TArray<string>.Create('foo', 'bar'); // ['foo', 'bar'] end; 不覚にもこんな基本的な機</string></string>…

for-in-doを使ったC#のusingもどき。

先日書いたような、インターフェースの参照カウントを利用したスマートポインタは便利は便利なんだけど、基本的に参照カウントの変動は(nilなどを明示的に代入しない限り)手続きや関数を抜ける際に行われるので、使い終わったらさっさと解放して欲しいとい…

TEncodingを拡張する。

普段から何かとデフォルト文字コードがShiftJISだったりして、DelphiでもShiftJISを扱いたい。だけどDelphiで使おうと思ったら、 var enc: TEncoding; begin enc := TEncoding.GetEncoding(932); try // ShiftJISを扱う処理 finally enc.Free; end; end; な…

Delphiでスマートポインタを。

ティファニーで朝食を、みたいな感じで書いたつもりが全然元ネタの香りもしない感じになったのは置いとくとして、Delphiにジェネリクスが実装されたのでスマートポインタも実装し放題な今日この頃、というか時期的にはもう旬は終わった感もあるくらいなので…

TIdHTTP.Getで文字化けしない方法@Delphi2010。

Delphi2010版というよりIndy10最新版でのやり方と言った方が正しいけど、以下のようにすればOK。 IdHTTP1.Response.CharSet := 'Shift_JIS'; これだけであとはGetを呼ぶと内部で変換した上で返してくれる。 もちろん決めうちなので自動で文字コード判別はで…

既存のレコードにヘルパーメソッドを追加する。

SyncObjs.pasを何気なく眺めていたところ、こんな記述が。 TCriticalSectionHelper = record helper for TRTLCriticalSection ... どうやらクラスヘルパーはレコードに対しても使える模様*1。ただ、VCL内でもたったの3箇所*2しか使われていない、"record hel…

ジェネリックレコード(クラス)と無名メソッドの組み合わせでバグ。

まずは再現コード。 // 以下Project1.dpr program Project1; {$APPTYPE CONSOLE} uses SysUtils, Unit1 in 'Unit1.pas'; var foo: TFoo<TObject>; proc: TProc; begin proc := foo.Bar(); // *1 proc; // *2 end. // 以下Unit1.pas unit Unit1; interface uses SysUti</tobject>…