From: take_tk Date: 2006-03-10T10:47:51+09:00 Subject: [ruby-list:41903] Re: "win32/registry" と "dl/win32" の相性について たけ(tk)です [ruby-list:41902] Re: "win32/registry" と "dl/win32" の相性について にて Takaaki Tateishi さん曰く: > > "dl/win32" の Win32API を前提とするメソッドで、 > > no implicit conversion from nil to integer (TypeError) > > というエラーになる。 > > require "win32/registry" でWin32API.soをロードするので、Win32API#callが > 再定義されてしまいます。その再定義のあとでMessageBox.callが呼ばれるので、 > Win32API.soのWin32API.callが使われることになります。 > > require 'dl/win32' > class Win32API > alias dlcall call > end > > とでもしておいて、Win32API#dlcallを使えば良いかもしれません。 > または、Win32APIというクラスを使わないかです。 これは、dl/win32 の Win32API にたいする互換性の問題で、おそらくは、 Integerを期待しているメソッドに対してnilを送ったときの動作の非互換性の問 題。 (a)dl/win32 で、この非互換性が生じている部分を見つけて Win32API 互換 になるように変更するか、 (b)win32/registory を訂正する、 というのが解決策ではないだろうか? 「dl/win32」は「Win32API」との互換性 のためにある、とするなら(a)が筋ではないか? 「dl/win32」が互換性を確 保すれば、win32/registory の require "Win32API" を "dl/win32" に変更でき ることになる。 Integer を期待するときに nil が入った時に、0 として扱うことが絶対にまず い、ということであれば、(b)が筋ということになるだろう。 いずれにしても、ユーザがトラブルに巻き込まれるのはまずい。ライブラリ側で 対処すべきだと思う。 Take_tk = KUMAGAI Hidetake たけ(tk)=熊谷秀武