From: Take_tk Date: 2003-11-08T13:10:55+09:00 Subject: [ruby-dev:21876] get_last_error or getLastError by DL::Importable たけ(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