Please note, that indeed all non-alpha-numeric delimiters are allowed, but it is highly recommended to use bracket delimiters for readability and unescaping reasons, like:
- ()
- []
- {}
- <>
1. Non-interpolated String
allows unescaping and string notation:%q(Ruby string (syntax) is "pretty" flexible) => "Ruby string (syntax) is \"pretty\" flexible"Please compare with the String result.
2. Interpolated String
allows flexible interpolation:choosen_language = "Ruby" %Q(#{choosen_language} string (syntax) is "pretty" flexible) => "Ruby string (syntax) is \"pretty\" flexible"and there is also an even shorter literal. % (percentage) alone is the default for an interpolated String:
choosen_language = "Ruby" %(#{choosen_language} string (syntax) is "pretty" flexible) => "Ruby string (syntax) is \"pretty\" flexible"
3. Non-interpolated Symbol
is maybe unusual:%s(ruby) => :rubyBut dealing with arbitrary characters like spaces and dashes also works:
%s(ruby is awesome) => :"ruby is awesome"and is more concise and idiomatic than:
"ruby is awesome".to_sym => :"ruby is awesome"
4. Non-interpolated String Array
is already quite popular:%w(Ruby Python Clojure) => ["Ruby", "Python", "Clojure"]The Array elements are separated by whitespace.
5. Interpolated String Array
is more flexible:choosen_language = "Ruby" %W(#{choosen_language} Python Clojure) => ["Ruby", "Python", "Clojure"]The Array elements also are separated by whitespace.
6. Non-interpolated Symbol Array
maybe is less known but analog to its String companion:%i(ruby python clojure) => [:ruby, :python, :clojure]
7. Interpolated Symbol Array
is also equivalent to its String mate:choosen_language = "ruby" %I(#{choosen_language} python clojure) => [:ruby, :python, :clojure]
8. Interpolated shell command
is pretty helpful for shell scripting:language = "ruby" %x(#{language} --version) => "ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]\n" language = "nodejs" %x(#{language} --version) => "v0.10.32\n"Although there are also other Ruby shell scripting approaches (Please read Tell shell scripting apart in Ruby!)
9. Interpolated regular expression
can be used with flags after the closing delimiterdisliked_language = "Java" string = %Q(#{disliked_language} helps to solve my problems.) regexp = /#{disliked_language}/i string.gsub(regexp, 'Ruby')The literal briefing:
Literal | Meaning |
%q | Non-interplated String |
%Q | Interpolated String |
%s | Non-interpolated Symbol |
%w | Non-interpolated String Array |
%W | Interpolated String Array |
%i | Non-interpolated Symbol Array |
%I | Interpolated Symbol Array |
%x | Interpolated Shell command |
%r | Interpolated regular expression |
Further articles of interest:
Supported by Ruby 2.1.1