たけ(tk)です。
[ruby-list:38712] のサンプル
================================================================
require "dl/import"
module Win32
extend DL::Importable
dlload "kernel32.dll"
extern "void SetLastError(DWORD)"
extern "DWORD GetLastError()"
end #/Win32
Win32.setLastError(1234)
p Win32.getLastError #=>0
================================================================
を見て違和感を感じたのですが、DL::Importable は元の名前が「GetLastError」
のときに「getLastError」という奇妙な名前に変換するようです。美しくないで
す。
なぜ、get_last_error というような名前に変換しないのでしょうか?
ApolloにはRuby流の名前に変換する関数があって、それで変換しています。
Rubyでも適切な名前に自動的に変換する関数を用意しておいたらどうでしょうか?
----
Apolloではこんな具合です。
----
require "phi"
p Phi.downcase("GetLastError") #=> "get_last_error"
----
実際の処理はPascalのソースで次のようになっています。
function LowerCase1(const S: string): string;
type
TState = (Z, UU, UL, L);
var
i:integer;
sw:TState;
c:char;
begin
result := AnsiLowerCase(S);
sw := Z;
for i := length(S) downto 1 do begin
c := S[i];
if c in ['a'..'z'] then begin
if (sw = UU) or (sw = UL) then begin
insert('_', result, i+1);
end;
sw := L;
end else if c in ['A'..'Z'] then begin
if sw = UL then begin
insert('_', result, i+1);
sw := UU;
end else if sw = L then begin
sw := UL;
end else begin
sw := UU;
end;
end else begin
sw := Z;
end;
end;
end;
take_tk = kumagai hidetake