1. ホーム
  2. ruby

Rubyの%q / %Qクォートメソッドのユースケースは何ですか?

2023-10-03 10:41:43

質問

ThomasのProgramming Ruby 1.9を読んでいて、シングルクォートとダブルクォートの代替区切りメソッドに出会いました( %q / %Q ). 他の Ruby 言語のリファレンスでも、このメソッドについて知っていました。

%q/I'm acting like a single-quoted string/

%Q|"I'm acting like a double-quoted string" --Anonymous|

私はRubyを長く使っているわけではありませんが、Rubyを使った 決して この引用方法は生産コードで遭遇したことはありません。

の明らかな機能以外に 内部で引用符をエスケープするのを避ける をバックスラッシュで回避できること以外に、通常のシングルクォートまたはダブルクォートよりもこの方法でクォートする一般的な使用例は何ですか? 一般的に、1行または複数行の文字列で使用されるのでしょうか?複数行の文字列で使用される場合、HEREDOC 文字列よりも好まれることがありますか?この方法がよく使われる特定のRubyイディオムはありますか?

どのように解決するのですか?

JavaScriptを含むHTMLをエスケープする際に、すでにクォートメソッドを使い果たした場合に非常に便利です。

link = %q[<a href="javascript:method('call')">link</a>]

また、複数行の SQL 文を扱うときにも非常に便利であることがわかりました。

execute(%Q[
  INSERT INTO table_a (column_a)
    SELECT value
      FROM table_b
      WHERE key='value'
])

この利点は、クエリで使用する引用符の種類に注意を払う必要がないことです。シングルでもダブルでも、またその両方でも動作します。また、HEREDOCスタイルの方法よりもずっと手間がかかりません。

Ruby には、このような便利なメソッドが他にもあります。 %r などがあり、正規表現を構築することができます。のようなものを扱うものを書こうとしたときに、スラッシュ炎を回避することができます。 http:// のようにエスケープしなければならないようなものを扱うものを書こうとしたときに、スラッシュ炎を避けることができます。