わたなべです.

"HIRATA Naoto" <hirata-naoto / sannet.ne.jp> writes:

:LinuxやFreeBSDのprintfには数字+$で引数の表示順を変える機能があっ
:て,拙作のruby-intlに便利だと思うのです(gettextのinfoでこの機能が
:あるのを前提としているフシがある).

printf にそんな機能があったなんて.

:Rubyのprintfにはないこの機能ですが,Unixでは標準的なのでしょうか?

sun4, solaris あたりの printf は使えるみたい.
NEWS-OS 4.x, NetBSD 1.2G はだめ.
djgpp, cygwin(newlib), mingw32(crtdll.dll) もだめ.
標準的かどうかちょっとよくわかんないけど, 実装するのは面倒そう.

Ruby で書くとこんな感じかな.

def fmt(f, *args)
  neworder = []
  nf = f.gsub(/%([1-9])\$/) do
    neworder << args[$1.to_i - 1]
    '%'
  end
  return nf, *neworder
end

printf *fmt("%2$d, %1$d\n", 1, 0)

-- 
わたなべひろふみ