Não foi possível carregar o Diqus. Se você é o moderador, por favor veja o nosso guia de problemas.

Éverton Ribeiro • 16 anos atrás

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
@

Nando Vieira • 16 anos atrás

É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. ;)

Lucas Húngaro • 16 anos atrás

Ó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

Lucas Húngaro • 16 anos atrás

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...

Shairon Toledo • 16 anos atrás

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]

Shairon Toledo • 16 anos atrás

and Full Java Style

Array a = Array.new
String s = String.new