Ruby %記法

%記法を使うと、要素の中にクォーテーション記号が入っている場合にエスケープせずに書けるなど、便利な場面がある。

基本的な書式

%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 2.7.0 リファレンスマニュアル)

(参考資料)プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus