まつもと ゆきひろです

簡単な方からフォローします.

In message "[ruby-dev:3335] format"
    on 98/07/17, Inaba Hiroto <inaba / st.rim.or.jp> writes:

|%Xでは桁数指定をしたとき「-」のつく位置が%d等と違っています.
|%Oは動作がマニュアルと一致していません。

この二つはバグです.修正します.

|まず普通のprintfでは%XはabcdefをABCDEFで表示するという意味があります。
|rubyでもそうなっていますが、2つの機能を同時に指定する事になってしまっ
|てます。

これは気になっていたんです.以前の私は「あきらめる」という判
断をしたのですが,別の指定子(たとえば-)を選ぶべきだったのか
も知れません.

|rubyのformat(printf)は%b, %x, %oについて, 引数が負のときに..を前につけ
|るようになってます。これらが引数としてbignumを受け付けるから, というの
|は理解できますけど, CやPerlとは非互換になってしまっています。まあ非互
|換なのはともかく、マニュアルに記述がありません。

で,最大の問題はこれです.

Rubyには厳密にはunsignedという概念がなく,数値をビット列とし
て使う時には負の数は右側に無限に1が並んでいるのだと見なすモ
デルを採用しています.このモデルでunsignedな指定子(%u,%o,%x,%X)
に負の数を与えると当然表示できないわけです.悩んだ末に今のよ
うに .. を右側につけるか,絶対値表現にマイナスをつけるような
表示にしたんです.

んでもって,これがマニュアルにそういうものだと記述すれば済む
問題なのか,別の表示を考えねばならんのか,などと考えてたんで
すが,そのうち忘れてしまっていました.すいません.^^;;;

どのようにすれば良いと思われますか?

なお,現在の実装では#なども負の数に対して正しく動作しないの
でこれも修正する必要がありますね.

                                まつもと ゆきひろ /:|)