一重引用符で囲まれた二重円記号のエスケープシーケンスを解釈するというRuby開発者の決定の背後にあるものに興味があります。一重引用符の文字を挿入できないため、エスケープされた一重引用符を解釈する必要がある理由を理解できます。例えば:
'\'' == "'"
しかし、考えてみて'\\' == "\\"
ください。なぜこれが別の特殊なケースなのですか?
他の人も指摘しているように、ハードクォートされた文字列で最初に必要なエスケープは です\'
。
しかし、が必要な本当の根本的な理由\\
は、 がサポートされると、ハードクォートされた文字列をバックスラッシュで終わらせることができなくなるからです。\'
これは、バックスラッシュ自体を挿入するためです。そのような特殊なケースがなければ、単一引用符で囲まれた文字列にバックスラッシュを含めることはできません。
\'
と\\
は、単一引用符で囲まれた文字列の唯一の 2 つのエスケープ シーケンスです。
この特殊なケースは、単一引用符またはアポストロフィを単一引用符で囲まれた文字列に埋め込むために必要です。次の点を考慮してください。
'\''
# => "'"
'It\'s a baby boy!'
# => "It's a baby boy!"
エスケープがない場合、Ruby は 2 番目の引用符が文字列を終了すると見なし、3 番目の引用符のバランスが崩れます。
前の結果として、エスケープ文字をエスケープして、後続の文字をエスケープしないようにする必要があります。たとえば'\'
、2 番目の引用符をエスケープして、終了していない文字列を残します。ただし、'\\'
文字列内にリテラル スラッシュが発生します。