From: GOTOU Yuuzou Date: 2004-11-16T15:14:21+09:00 Subject: [ruby-dev:24869] [-2**31].pack("N") 何度もすみません。 1.8で-2**31(=LONG_MIN)をpack("N")するとエラーになります。 % ruby18 -ve 'p [-2**31].pack("N")' ruby 1.8.2 (2004-11-16) [i386-netbsd] -e:1:in `pack': bignum out of range of unsigned long (RangeError) from -e:1 1.9では-2**31-1以下でもpackできるのですが、それに合わせるの は変わり過ぎなんでしょうか。 もうひとつ1.8で、[0x80000000].pack("U")の結果がプラットフォー ムよって違います。 % ruby18 -ve '[0x80000000].pack("U")' ruby 1.8.2 (2004-11-16) [x86_64-netbsd] -e:1:in `pack': pack(U): value out of range (ArgumentError) from -e:1 % ruby18 -ve '[0x80000000].pack("U")' ruby 1.8.2 (2004-11-16) [i386-netbsd] -e:1:in `pack': pack(U): value out of range (RangeError) from -e:1 1.8.2-preview3ではi386もArgumentErrorを上げていたようですが、 % ./ruby -ve '[0x100000000].pack("U")' ruby 1.8.2 (2004-11-06) [i386-netbsd] -e:1:in `pack': bignum too big to convert into `unsigned long' (RangeError) from -e:1 といった場合に合わせて、RangeErrorに統一するのがよさそうに思 います。こちらはuv_to_utf8()の最後でRangeErrorを上げるように すれば変わります。 -- ごとうゆうぞう