今回はC言語使いにもお馴染み、printf記法の話です。
やや記法が独特なところがありますが、使いこなせば複雑な文字列も割と気軽に生成できます。
以下の例では、出力したいものを
id = 3 measure = 20
とします。
printfだと代入できない
printfはputsやprintと同じように出力(デフォではstdout)をするだけのメソッドです。
これを文字列代入に使おうとすると
> str = printf "id => 0x%04x, measured => 0x%02x\n" , id, measure id => 0x0003, measured => 0x14 => nil > p str nil => nil
……nilが返って来ます。
C言語のsprintfなら、代入先を引数に指定してあげるオプションがあるのですが……
Rubyでは発見できませんでした。
出力先を変更する荒技も考えられますが……オススメはしません。
そこで登場するのが、以下の記法です。
インスタンスメソッド self % args -> String なら代入可能
> str = %Q{id => 0x%04x, measured => 0x%02x} % [id, measure] # 「" "」でも大丈夫です => "id => 0x0003, measured => 0x14" > p str "id => 0x0003, measured => 0x14" => "id => 0x0003, measured => 0x14"
%以下に配列を指定すれば複数個のデータでも対応できます。
まとめ
もちろん、インライン解釈を使い数行にわけて記入するのも手です。
でも、こっちの方がスマートでいいですね。
HTMLとの合わせ技*2では特に有効な小技です。