文字列の式展開
PHPと同様にダブルクォート、シングルクォートにより文字列を表現する。
前者は変数展開あり、後者は変数展開なし。
実際には文字列内の”式展開”で、式のto_sメソッドの評価結果が文字列に展開される。
to_sメソッドを備えていれば独自クラスでも展開できる。
hoge = 10
p "hoge is #{hoge}" # hoge is 10
p 'hoge is #{hoge}' # hoge is \#{a}
ただ文字列の中に変数を書いただけではダメで、変数展開用の識別子がいるんだな。
パーセント記法による式展開
シングルクォート、ダブルクォート以外を使って文字列を作ることもできる。
文字列の中でエスケープ無しでシングルクォート、ダブルクォートを使えて便利。
hoge = %*THIS IS TEST STRING "HOGEHOGE".*%
もともとシングルクォート、ダブルクォートの区別により式展開するしないが決まっていたが、
当然パーセント記法を使うと式展開をそのままでは選べない。
パーセントの後にq、またはQを付与することで式展開をするしないを選ぶことができる。
なお、デフォルトは式展開をする。つまり%Qと同じ。
fuga = 100
%q*#{fuga + 100}* # "\#{fuga + 100}"
%Q*#{fuga + 100}* # "200"
Rubyが複雑に見えるのはコイツのせいじゃないだろうか。
文字列の型変換
文字列から整数、浮動小数点、複素数、有理数などへ変換できる。
それぞれ、to_i、to_f、to_c、to_rというメソッドが用意されている。
厄介そうなことに、型変換ができない場合、変換できるところまで変換する。
そもそも先頭の文字が変換できないなら0。
"100".to_i # 100
"10ab".to_i # 10
"1.1.1".to_f # 1
"hoge".to_i # 0
デバッグ出力と関数
文字列をデバッグ用途に出力するときはpを使う。変数内の式は展開されない。
他に、print、putsで出力できる。こちらは変数内の式が展開される。
hoge = "100 \n"
p hoge # "100 \n"
puts 100 # 100
ヒアドキュメント
変数展開なしのヒアドキュメントは以下の通り。ヒアドキュメントの開始をシングルクォートにする。
ヒアドキュメントの終了は識別子も前にスペース禁止。
hoge = 100
str = <<'DOC'
#{hoge}
HOGE
DOC
変数展開ありのヒアドキュメントは以下の通り。開始をダブルクォートにする。
hoge = 100
str = <<"DOC"
#{hoge}
HOGE
DOC
文字列演算
文字列は+、*に対応している。
hoge = "HOGE" + "FUGA" # "HOGEFUGA"
fuga = "HOGE" * 3 # "HOGEHOGEHOGE"
<<により文字列連結。
hoge = "HOGE"
hoge << "FUGA" # "HOGEFUGA"
比較演算
文字列の辞書順で比較する。
"X" < "Y" # true
"X" > "Y" # false
"XXX" < "XXY" # true
"XYZ" == "XYZ" # true
文字列長
.lengthメソッドにより文字列長を返す。バイト数ではなく文字数。
"HOGEHOGE".length # 8
sprintfと%
%演算子にはsprintf相当の機能も備わっていて混乱する。
知らないと訳がわからない。
sprintf("THIS IS TEST INTEGER %02d",1) # "THIS IS TEST INTEGER 01"
p "THIS IS TEST INTEGER %02d" % 1 # THIS IS TEST INTEGER 01"