74

私は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 を使用していませんが、本番コードでこの引用方法に遭遇したことはありません。

バックスラッシュで引用符を内部的にエスケープすることを回避する明らかな機能以外に、通常の一重引用符または二重引用符を引用するこの方法の一般的な使用例は何ですか? それらは通常、単一行または複数行の文字列で使用されますか? 複数行の文字列で使用する場合、HEREDOC 文字列よりも優先されますか? それらが一般的に見られる特定のRubyイディオムはありますか?

4

5 に答える 5

114

これらは、既に引用メソッドが「不足」している場合に、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 スタイルの方法よりも手間がかかりません。

%rRuby は、正規表現を構築できるなど、このような便利なメソッドを他にも提供しています。http://そうでなければエスケープしなければならないようなものを処理するものを書こうとするとき、それはスラッシュ炎を回避します。

于 2012-04-13T16:28:31.147 に答える
3

%q は、gemspec の要約/説明セクションのために、gemspec を生成するときにバンドラーとジュエラーによってデフォルトで使用されることに注意してください。これにより、誰かが概要や説明で引用符を使用して gemspec を壊すことを防ぎます。

于 2013-11-30T15:32:24.793 に答える
-1

文字列に一重引用符または二重引用符が含まれている場合に便利です。これはそれほど頻繁に発生するわけではありませんが、発生した場合、この手法は非常に役立ちます。

于 2012-04-13T16:29:01.977 に答える