1) Это буквально, где это %
, затем a r (регулярное выражение), w (массив), q (строка) и т. Д. Для обозначения различных букв.
2)
ruby-1.9.2-p136 :001 > %w{1 2 3}
=> ["1", "2", "3"]
ruby-1.9.2-p136 :002 > %w[1 2 3]
=> ["1", "2", "3"]
ruby-1.9.2-p136 :008 > %w!a s d f!
=> ["a", "s", "d", "f"]
ruby-1.9.2-p136 :009 > %w@a s d f@
=> ["a", "s", "d", "f"]
Таким образом, вы можете видеть, что можете использовать любой символ, если он отмечает как начало, так и конец содержимого.
3)
Вот еще несколько примеров:
Строки: (% q или% Q)
ruby-1.9.2-p136 :016 > %Q[ruby is cool]
=> "ruby is cool"
ruby-1.9.2-p136 :017 > %q[ruby is "cool"]
=> "ruby is \"cool\""
Регулярное выражение: (% r)
ruby-1.9.2-p136 :019 > %r[(\w+)]
=> /(\w+)/
Команда Sys: (% x)
ruby-1.9.2-p136 :020 > %x[date]
=> "Tue Mar 29 12:55:30 EDT 2011\n"
4) Они не могут быть вложенными, потому что %w
означает разделенный массив пробелов. Так что, если вы попытаетесь сделать многоуровневый, это будет выглядеть так:
ruby-1.9.2-p136 :003 > %w{1 %w{2 3 4} 5}
=> ["1", "%w{2", "3", "4}", "5"]
Для этого вам нужно использовать более подробный синтаксис:
ruby-1.9.2-p136 :011 > [1, [2,3,4], 5]
=> [1, [2, 3, 4], 5]