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