Cでのプログラミングの初歩は printf を置いてほかにないので、ぐぐってみたところ幸運にもRubyにも存在するprintfメソッドを試してみる。
printf("%s\n",'Hello, World!');
うん、おkっすね。
printf("%f\n",1/3)
おおっと、これは融通が利かない。ならばこれでどうかな、と。
printf("%f\n",1.to_f/3) printf("%f\n",1.0/3)
おk。式がちょっとかっこ悪く見えますが動きますね。基本的な型のクラスではたいてい .to_x
で変換できるのでお手軽です。機能別索引 - Rubyリファレンスマニュアルを見る限りでは、 .to_i
, .to_s
, .to_a
, .to_f
, .to_hash
がありました。
文字列リテラルについてはリテラル - Rubyリファレンスマニュアル #文字列リテラルを参照。Rubyは文字列リテラルの表現がいっぱいあって良いですね。さしあたっては ' と " の挙動の差がわかれば良さげっぽいです。" はエスケープが変換されて、' は変換されない、と。残りは暇があれば覚えれば良いっすね。
で、本題。実際には画面に出力するだけよりも sprintf で文字列を加工した方がファイル出力にも転用できたり、便利が良さげっぽいです。
str=sprintf("%f\n",1.to_f/3) puts str
これでおkですか。でも、String - Rubyリファレンスマニュアル #self % argsを見るとちょっと面白いことが書いてある。
puts "%s" % 'Hello, World!' puts "%s%s" % ['Hello, ', 'World!']
フォーマット指定子がひとつの場合はそのまま、複数なら配列にして渡せる、と。こりゃあ便利っぽいですね。
ついでにprintf的に積み残してたのをこっちの記法で書いてみる。irbで実行するのでputは書かない。
"%f" % 1.11111 "%.5f" % 1.11111 "%b" % 21 "%10b" % 21 "%.10b" % 21
おkおk。これは素敵。Cのprintfには無い%bが追加されてビットを表示できる時点でRubyに惚れますね。濡れますね。