Não foi possível carregar o Diqus. Se você é o moderador, por favor veja o nosso guia de problemas.
Éverton,
Quando você vai declarar uma string, você não precisa usar parenteses ou chaves necessariamente (%(Foo) ou %{Foo}). Você pode usar qualquer caracter, como nos exemplos que você passou (%@Foo@ e demais).
Quanto à sua substituição do HEREDOC: o que você está fazendo é simplesmente criar uma string multilinhas como com o atalho. ;)
Ótimo post.
Uma dica: no Ruby 1.9, você provavelmente irá cair num erro "Encoding::CompatibilityError: incompatible encoding regexp match (Windows-31J regexp with UTF-8 string)" se usar o modificador s nas expressões regulares (por exemplo: /ruby/sim)
Não achei ainda uma documentação oficial sobre isso mas, no 1.9, o s configura a Regexp pra fazer o matching usando o encoding Windows-31J. Dessa forma, se a string na qual você está aplicando a expressão regular estiver num encoding incompatível com esse (como UTF-8), vai dar pau. Tivemos alguns problemas relacionados a isso na sanitização de feeds pro http://busk.com
Exemplo: http://pastie.org/568326
Retificando:
Na verdade, desde versões anteriores, o s configura encoding. Mas o 1.8 "deixa passar" e o 1.9 é "chato" com encoding (ainda bem).
Para usar o mode estendido a flag é x.
Referência: http://www.zenspider.com/La...
s = 'mais uma ' 'maneira' => "mais uma maneira"
s = String.new("Maneira javesca") #=> "Maneira javesca"
s = %q| pode usar pipe | => " pode usar pipe "
s = %q[ pode usar outros tokens] => " pode usar outros tokens"
s = %| ou apenas % | => " ou apenas % "
#Array
in_line = :foo, 34, :bar, 3000 #=> [:foo, 34, :bar, 3000]
a = Array['verbosada',2,3,4] #=> ["verbosada", 2, 3, 4]
com_fill = Array.new(5){|i| i**2 } #=> [0, 1, 4, 9, 16]
a,*b = 1,3,6 #=> a => 1 e b => [3, 6]
and Full Java Style
Array a = Array.new
String s = String.new
Existe um esquema com o operador % que pode ser usado para declarar strings, eu ainda não consegui descobrir como ele funciona realmente, mas a primeira vez que vi isso foi no código do ActiveRecord, um exemplo:
string = %@Foo bar@ # => "Foo bar"
string = %$Foo bar$ # => "Foo bar"
string = %_Foo bar_ # => "Foo bar"
Para os três casos o resultado é o mesmo, e inclusive pode ser usado com outros operadores, como (), &&, **, e por ai vai.
Eu tenho usado ele como uma forma alternativa ao <<-TXT, podendo escrever strings assim:
string = %@
Hello
Foo Bar
@