【一人 Ruby Advent Calendar 2017】Ruby の % 記法【22日目】
一人 Ruby Advent Calendar 2017 22日目の記事になります。
そろそろラストスパート
% 記法
Ruby には %
記法という特別なリテラルがあります。
例えば、%w
という記法を使うと以下のように『空白文字で分割した』文字列の配列として定義されます。
p %w(homu mami mado) # => ["homu", "mami", "mado"]
またこの時に記述した %w()
の ()
は []
、{}
、<>
みたいな括弧や『改行を含めた任意の非英数字』を利用することが出来ます。
p %w<homu () mado> # => ["homu", "()", "mado"] p %w`'() [] {}` # => ["'()", "[]", "{}"] p %w!` " '! # => ["`", "\"", "'"]
こんな感じでリテラルで定義する記号によって ()
の記号を変えることが出来ます。
%
、%Q
:ダブルクオート文字列
%
、%Q
は『ダブルクオート文字列』として定義されます。
p %(homu "mami") # => "homu \"mami\"" # 式展開も行える p %Q("#{5 + 4}:mado") # => "\"9:mado\""
%q
:シングルクオート文字列
%q
は『シングルクオート文字列』として定義されます。
p %q(homu "mami" 'mado') # => "homu \"mami\" 'mado'" # 式展開は行われない p %q(#{2 + 4}) # => "\#{2 + 4}"
%x
:コマンド出力
%x
は外部コマンドを実行して結果を返します。
p %x(ls) # => ls コマンドの実行結果
` と同じです。
%r
:正規表現
p %r(\d+) # => /\d+/ # / もエスケープされる p %r(http://.*) # => /http:\/\/.*/
%w
:空白文字で区切った要素が文字列の配列を定義
%w
は『空白文字で区切った要素が文字列の配列』を定義します。
p %w(homu mami mado) # => ["homu", "mami", "mado"] p %w("homu" "ma mi" "mado") # => ["\"homu\"", "\"ma", "mi\"", "\"mado\""]
%W
:%w
と同等(式展開とバックスラッシュ記法が有効)
%w
と同等ですが『式展開とバックスラッシュ記法』が有効です。
p %W(#{2 + 4}:#{[1, 2, 3]}) # => ["6:[1, 2, 3]"] p %W(homu ma\mi mado) # => ["homu", "mami", "mado"]
%s
:シンボル
%s
は『シンボル』で定義されます。
また、式展開、バックスラッシュ記法は無効です。
p %s(homu) # => :homu p %s(42) # => :"42" p %s(#{1 + 2}) # => :"\#{1 + 2}"
%i
:空白文字で区切った要素がシンボルの配列を定義
%i
は %w
と同様に『空白文字で区切った要素』の配列として定義されますが、文字列ではなくてシンボルとして定義されます。
p %i(homu mami mado) # => [:homu, :mami, :mado] p %i(homu mami #{2 + 2}) # => [:homu, :mami, :"\#{2", :+, :"2}"
%I
:%i
と同等(式展開とバックスラッシュ記法が有効)
%i
と同等ですが、『式展開とバックスラッシュ記法』が有効になります。
p %I(homu mami mado) # => [:homu, :mami, :mado] p %I(homu mami #{2 + 2}) # => [:homu, :mami, :"4"]
まとめ
正規表現で /
を含めいたことは稀によくあるのでそういう場合は %r
を使うと楽ですねえ。