なぜ非補間文字列を使用するのですか?
もちろん、補間したくない場合。たとえば、おそらくあなたは、文字列の補間についてのいくつかのドキュメントを出力している:
'Use #{x} to interpolate the value of x.'
=> "Use #{x} to interpolate the value of x."
%構文が引用されたリテラルの上にどのような利点がありますか?
それはあなたが引用符なしで、より自然に文字列を書き込み、またはあなたがC#の文字列リテラルプレフィックス@
に類似し、多くのことをエスケープしたくない場合にすることができます。
%w{apple banana #{1}cucumber} # [w]hitespace-separated array, no interpolation
=> ["apple", "banana", "\#{1}cucumber"]
%W{apple banana #{1}cucumber} # [W]hitespace-separated array with interpolation
=> ["apple", "banana", "1cucumber"]
# [r]egular expression (finds all unary primes)
%r{^1?$|^(11+?)\1+$}
=> /^1?$|^(11+?)\1+$/
(1..30).to_a.select{ |i| ("1" * i) !~ %r{^1?$|^(11+?)\1+$} }
=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
%x{ruby --version} # [s]hell command
=> "ruby 1.9.1p129 (2009-05-12 revision 23412) [x86_64-linux]\n"
%s
(記号のため)もありますし、いくつかの他:
%{The % syntax make strings look more "natural".}
=> "The % syntax makes strings look more \"natural\"."
%{<basket size="50">}
=> "<basket size=\"50\">"
は、他の多く%-notationsがあります。
なぜ文字列リテラルを作成するには5つの方法がありますか?
これはあまり珍しいことではありません。たとえば、文字列を生成する方法がいくつかあるC#を考えてみましょう。new String()
; ""
; @""
; StringBuilder.ToString()
など。
「自然」は非常に主観的です。 「ひどく珍しい」とは、言語機能を作成する動機ではありません。 – skrat
"ナチュラル"は非常に主観的ですが、「正確に同じものを言うのが簡単ではないタイプの文字」はそうではなく、言語機能を作成するためのかなり良い動機です。 –