えぐち@エスアンドイー です。

>>> On Sat, 6 Feb 1999 02:29:23 +0900, matz / netlab.co.jp (Yukihiro Matsumoto) said:

matz> まつもと ゆきひろです
matz> 
matz> In message "[ruby-dev:4752] Re: [REQ] 2進数整数リテラル"
matz>     on 99/02/05, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:
matz> 
matz> |えぐち@エスアンドイー です。
matz> 
matz> |>>> On Fri, 5 Feb 1999 13:12:37 +0900, matz / netlab.co.jp (Yukihiro Matsumoto) said:
matz> 
matz> |matz> printfに%bもあることですし,他への影響が小さそうですので,私
matz> |matz> は前向きです.
matz> |
matz> |ありがとうございます。
matz> |(「ささとパッチ送れ」と解釈しました。0205 版 get し次第送ります。)
matz> 
matz> あ,すいません.せっついたように感じられました?
いゃぁ、そんな事はないですょ。

ところで、 sprintf() ですが、
                                    Ruby Functions (p21 of 29)
   sprintf(format...)
...
          format指定子はC言語のsprintfが受け付 けるものに
          加えて, %b, %B, %O, %Xを使うことができます.%b
          は数 値の2進表示,%B, %O, %Xはそれぞれ2進,8進
          ,16進数の表示を行 ないますが,負の数の処理の際
          に2の補数表現ではなく,その絶対 値表記の先頭に
          -をつけたものを表示します.

とありますが、%B, %O の部分って未実装ですか?
それとも、仕様変更にマニュアルが未追従?

それから、%X は C言語 では、

	printf("%x",0xbad);	=>	bad
	printf("%X",0xbad);	=>	BAD

の様に大文字/小文字の意で定義されてますけど、
これも Ruby では有符合表示に定義を変更しますか?
(現在の ruby では、大文字/小文字の意に解釈されます)

私は、16進数を符合付きで format 出来るのは魅力的ですが、
%X に限っては、 C言語流な挙動を残して欲しいと思います。

そこで、、、

 仕様の追加の提案。

  内容
    sprintf/format/printf 系統に %r フォーマットの追加

  判例
    %10.17r	=> 17 進数, 右に ' ' づめ, 10 桁, 符合なし, 小文字
    %+08.36R	=> 36 進数, 右に '0' づめ,  8 桁, 符合あり, 大文字

  範囲
    基数の取り得る範囲は、2 から 36

  表示文字集合

    %r では "0123456789abcdefghijklmnopqrstuvwxyz"
    %R では "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    がそれぞれ使用される

  例外
    基数省略の場合は、10 を仮定する、つまり %d に同じ

こんなのは、如何でしょうか?

# printf の scanner に flex 使いたくなってしまうのは
# 軟弱者? 、、、いゃ、使ゃぁしませんよ

	えぐち