3-3-3 式の展開と%記法

式の展開とクォーテーション

文字列を定義するには、クォーテーションで囲む必要があります。

これまで説明にはシングルクォーテーションを用いてきましたが、ダブルクォーテーションでも同じように使うことができます。

では、シングルクォーテーションとダブルクォーテーションの違いはないのでしょうか?

Rubyでは文字列内での式の展開が可能で、ダブルクォーテーションで囲む場合はその文字列の内部で#{Rubyの式}と記述します。

Rubyの式の部分にはそのままRubyのプログラムを記述することができます。

たとえば、a = "#{1 + 1}"と記述するとRubyの式として1 + 1が評価され、変数aには文字列2が代入されることになります。

この定義を、シングルクォーテーションを使って書き直したa = '#{1 + 1}'と記述すると、1 + 1の部分はRubyの式として評価されないので、変数aには文字列の#{1 + 1}が代入されます。

式の展開をする%W%I

%記法には、式の展開をする%W%Iもあります。

それぞれ、%Wは文字列の配列を効率的に表す%wの式展開版、%Iはシンボルの配列を効率的に表す%iの式展開版です。

%の隣の英字が小文字と大文字で動作が異なるという特徴があります。

%Wを使うと式が展開されますので、たとえばa = %W(#{1 + 1} #{1 + 2})とすると、1 + 11 + 2がそれぞれ評価されて、変数aには['2', '3']が代入されます。

irb(main):001:0> a = %W(#{1 + 1} #{1 + 2})
=> ["2", "3"]

%Iを使った例では、a = %I(#{'b' + 'c'}, #{'d' + 'e'})とすると、'b' + 'c''d' + 'e'がそれぞれ評価されて、変数aには[:bc, :de]が代入されます。

irb(main):002:0> a = %I(#{'b' + 'c'}, #{'d' + 'e'})
=> [:"bc,", :de]