背景
アプリ制作時、調べ物をしている際に「%i~」という記述を見て何かと気になったため調べた。
その内容を簡単にまとめて備忘録として記載することにしました。
%記法とは
文字列リテラル、コマンド出力、正規表現リテラル、配列式、シンボルでは、 %で始まる形式の記法を用いることができ、それを「%記法」と言います。
文字列や正規表現では、"',
/' など(通常のリテラルの区切り文字)を要素に含めたい場合にバックスラッシュの数をコードから減らす効果がある。また配列式では文字列の配列やシンボルの配列を簡単に表現できます。
###記法一覧
%!STRING! # ダブルクォート文字列
%Q!STRING! # 同上
%q!STRING! # シングルクォート文字列
%x!STRING! # コマンド出力
%r!STRING! # 正規表現
%w!STRING! # 要素が文字列の配列(空白区切り)
%W!STRING! # 要素が文字列の配列(空白区切り)。式展開、バックスラッシュ記法が有効
%s!STRING! # シンボル。式展開、バックスラッシュ記法は無効
%i!STRING! # 要素がシンボルの配列(空白区切り)
%I!STRING! # 要素がシンボルの配列(空白区切り)。式展開、バックスラッシュ記法が有効
!の部分には改行を含めた任意の非英数字を使うことができる (%w、%W、%i、%I は区切りに空白、改行を用いるため、!の部分には使うことができない)。
始まりの区切り文字が括弧((',
[',{',
<')である時には、終りの区切り文字は対応する括弧になります。
括弧を区切り文字にした場合、対応が取れていれば区切り文字と同じ括弧を要素に含めることができます。
###記法実例
%w(foo bar baz) # 要素が文字列の配列(空白区切り)
['foo', 'bar', 'baz']
%w(foo\ bar baz) # バックスラッシュを使って空白を要素に含める
=> ["foo bar", "baz"]
v = "c d"
%W(a\ b #{v}e\sf #{}) # 式展開、バックスラッシュ記法が使用できる
=> ["a b", "c de f", ""]
参考
Ruby 2.7.0 リファレンスマニュアル > リテラル
https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#percent