DelphiでMap関数ぽいもの
日曜なのに出勤だったので、ついカッとなってやった
※ map関数は、引数に関数と配列*1を取って、配列のそれぞれに対して与えられた関数を適用させる関数のこと
引数に関数を渡すため、あらかじめ手続き型を宣言しておく(参考: Delphiでコールバック - 飲む、寝る。)。
type TProc = procedure(p: Pointer);
引数の型が違うたびに宣言するのは面倒*2なのでポインタ型にして、関数はラッパーを作ってそれを渡すことにしてみた*3。
procedure Map(proc: TProc; args: array of Pointer); var i: Integer; begin for i := 0 to High(args) do proc(args[i]); end; procedure Main; procedure WrappedShowMessage(p: Pointer); begin ShowMessage(String(p^)); end; var s1, s2, s3: String; begin s1 := '1'; s2 := '2'; s3 := '3'; Map(@WrapedShowMessage, [@s1, @s2, @s3]); end;
もうちょっと洗練させないと使うことはなさそうだけど…