%記法を使うと、要素の中にクォーテーション記号が入っている場合にエスケープせずに書けるなど、便利な場面がある。
基本的な書式
%w!文字列など! %w(文字列など)
要素を囲む記号は!
以外に?
や()
、[]
など英数字以外の記号を使うことができる。
種類 | 記号 |
---|---|
文字列の配列 | w / W |
シンボル | s |
シンボルの配列 | i / I |
文字列 | q / Q |
大文字だと式展開が有効。小文字では無効。
使用例
文字列の配列
str = "orange" p %w(apple 'banana' "cherry" #{str}) #=> ["apple", "'banana'", "\"cherry\"", "\#{str}"] p %W(apple 'banana' "cherry" #{str}) #=> ["apple", "'banana'", "\"cherry\"", "orange"]
空白文字区切りで配列を作成できる。要素内にスペースがあるときは\
でエスケープが必要。
シンボル
p %s(apple) #=> :apple p %s(apple banana) #=> :"apple banana"
一つのシンボルを作れる。
シンボルの配列
p %i(apple banana cherry #{str}) #=> [:apple, :banana, :cherry, :"\#{str}"] p %I(apple banana cherry #{str}) #=> [:apple, :banana, :cherry, :orange]
小文字だと式展開は無効。
文字列
文字列に"
が含まれるときに、自動でエスケープしてくれる。
str = "orange" p %q(apple 'banana' "cherry" #{str}) #=> "apple 'banana' \"cherry\" \#{str}" p %Q(apple 'banana' "cherry" #{str}) #=> "apple 'banana' \"cherry\" orange"
%記法を使わず、全体をクォーテーションで囲んだ場合エラーになる。
p "apple 'banana' "cherry" #{str}" #=> エラー p 'apple 'banana' "cherry" #{str}' #=> エラー
クォーテーションで囲むときは、文字列内のクォーテーション記号の前に\
をつけてエスケープする必要がある。これが面倒なので、%記法を使うとよい。
p "apple 'banana' \"cherry\" #{str}" #=> "apple 'banana' \"cherry\" orange" p 'apple \'banana\' "cherry" orange' #=> "apple 'banana' \"cherry\" orange"
全体を'
で囲んだときは、文字列内の"
は勝手にエスケープしてくれる。
(参考資料)プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus