[ top ] [ prev ] [ up ] [ next ]

Ruby から Delphi へ値を変換する

順序型の範囲チェック

Fixnumを順序型へ変換するときは範囲チェックが必要です。
順序型の範囲を整数で得るには Ord(Low(Type)), Ord(High(Type)) が使えますが、これは見た目があまりに冗長です。例外処理にしてしまいましょう。

ap_raise に与える Ruby 例外の種類について。Ruby の範囲例外は ap_eIndexError ですが、インデックスが引数として与えられている場合は ap_eArgError を使ったほうが良いでしょう(Ruby本体がそうなっているから)。

setter の返り値

代入を連鎖できるように、プロパティを設定するメソッド(名前の末尾に = が付くメソッド)の返り値は、引数(第一引数。例では v )そのものにすべきです。

function Editor_set_selection_mode(This, v: Tvalue): Tvalue; cdecl;
var
  real: TEditor;
begin
  real := ap_data_get_struct(This);
  real.SelectionMode := TEditorSelectionMode(dl_Integer(v));
  result := v;
end;
...
  DefineAttrSet(cEditor, 'selection_mode', Editor_set_selection_mode);
author: YOSHIDA Kazuhiro
[ top ] [ prev ] [ up ] [ next ]