From: "NARUSE, Yui" Date: 2008-07-17T01:30:28+09:00 Subject: [ruby-dev:35550] Re: pack('i')の挙動...はたして何が期待されているのか 成瀬です。 Urabe Shyouhei wrote: > 1. このマシンLP64なので本来的には'i'はこのテストでRangeErrorを上げなけれ > ばならないはずだと思うんですが、バグってませんか?それとも仕様として'i'は > intの幅ではない何か別の幅なんでしょうか。 > > 2. 'i'がintの幅という仮定をおいたとします。そのとき、このテストはintの幅 > を知らないと書けません(つまり今のリテラルで32とか書いてある状態はおかし > い)。さて、rubyレベルでintの幅はどうやって知ればいいんでしょう? pack.c の rdoc を見ると cslq は 8, 16, 32, 64bit 固定なんですが、 これは Perl の pack の定義と一致しています。 http://perldoc.perl.org/functions/pack.html なので、'i' は int の幅であるとあわせておくのが無難かと思います。 すると、'i' がテスト困難になるわけですが、 まぁ、s! と l! もその辺の事情は同じわけで・・・。 どこかに突っ込むとしたら、RbConfig あたり? -- NARUSE, Yui