概要
@mattn さんのホクイモ、Rubyでわからないところがあったので調べました。
説明
コード再掲
puts '%1$s%1$sの%2$s'%((%w[ホイクモ]*2).map{|x|x.chars.sample(2).join})
'%1$s%1$sの%2$s'%
の最後の%はString#%
で、Stringクラスのメソッドで、フォーマットに対して呼び出すと引数を適用した文字列を返してくれるそうです。
フォーマットの詳細はKernel::sprintf
を見ろというので、見に行きます。
見てみると、%
、s
、$
を使っているとわかります。
下記の事例などがわかりやすいですね。
sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
感想
元記事のコメント欄で、C++の人から強い言葉でコメントがついていて、(以下略)。