著作一覧 |
riを入れるとサイズがでかくなりすぎるので、previewが付いている間は、ri用のドキュメントを外した格好でパッケージングします。大体10MB弱。
Rubyパッケージ置き場へどうぞ。
添付のリファレンスマニュアルは、okkezさんの1.9.0 chm最新版です(感謝!)。
C:/PROGRA~2/RUBY-1~1.1/lib/ruby/vendor_ruby/1.9.1/icmpping.rb:72:in `[]=': can't convert Fixnum into String (TypeError)うう、今までテストしてなかったのがわかるなぁ。(というエラーになるのが上のパッケージには同梱してある)
dat[2], dat[3] = cksum >> 8, cksum & 0xffというのが引っかかったのであった。
dat[2], dat[3] = ((cksum >> 8) & 0xff).chr, (cksum & 0xff).chrでも、それで終わりではない。
undefined method `&' for "E":Stringというエラーが出る。&というとこのあたりだな。
icmpdat = rdat[0].slice((rdat[0][0] & 0x0f) * 4..-1)確かに、文字列に対して&を呼び出している。
icmpdat = rdat[0].slice((rdat[0].getbyte(0) & 0x0f) * 4..-1)というような感じだが、もっとうまい方法はないかな? (このプログラムの場合、String#&にしろString#[]=にしろ他の使い方とは干渉しないから、直接これらのメソッドを修正するというのも方法かも知れない)
というわけで次のようなのを先頭に入れてみたりして。
begin "a"[0] = 64 rescue class String alias :array_set_org :[]= def []=(i, c) if Integer === c array_set_org(i, (c & 0xff).chr) else array_set_org(i, c) end end def &(c) if Integer === c getbyte(0) & c else self & c end end end endこれで、これに関しては1.8でも1.9でも動くはずだ(で試すと動いたのでとりあえずこれでいいや)。
ジェズイットを見習え |