Estou olhando a documentação do FileUtils.
Estou confuso com a seguinte linha:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
O que %w
significa isso? Você pode me indicar a documentação?
%w(foo bar)
é um atalho para ["foo", "bar"]
. Significando que é uma notação escrever uma matriz de cadeias separadas por espaços em vez de vírgulas e sem aspas. Você pode encontrar uma lista de maneiras de escrever literais no quickref do zenspider .
%w(ab\ c def) # => ["ab c", "def"]
Penso
%w()
como uma "matriz de palavras" - os elementos são delimitados por espaços e retornam uma matriz de seqüências de caracteres.Existem outros% literais:
%r()
é outra maneira de escrever uma expressão regular.%q()
é outra maneira de escrever uma string de aspas simples (e pode ser multilinhas, o que é útil)%Q()
fornece uma string de aspas duplas%x()
é um comando shell%i()
fornece uma matriz de símbolos (Ruby> = 2.0.0)%s()
se transformafoo
em um símbolo (:foo
)Eu não conheço outros, mas pode haver alguns por aí ...
fonte
%i()
para gerar uma matriz de símbolos.%()
(ou%[]
ou%{}
) que fornece uma string com aspas duplas e escapa aspas duplas, como%Q()
. Exemplo%("sender name" <[email protected]>) # => "\"sender name\" <[email protected]>"
Também existe o
%s
que permite criar qualquer símbolo, por exemplo:Desde o Ruby 2.0.0, você também tem:
fonte
%W
e%w
permite criar uma matriz de seqüências de caracteres sem usar aspas e vírgulas.fonte
Embora seja um post antigo, a pergunta continua aparecendo e as respostas nem sempre parecem claras para mim, então, eis os meus pensamentos:
%w
e%W
são exemplos de tipos de entrada delimitada geral , relacionados a matrizes. Existem outros tipos que incluem%q
,%Q
,%r
,%x
e%i
.A diferença entre as versões maiúscula e minúscula é que ela nos dá acesso aos recursos de aspas simples e duplas. Com aspas simples e (minúsculas)
%w
, não temos interpolação de código (#{someCode}
) e um intervalo limitado de caracteres de escape que funcionam (\\
,\n
). Com aspas duplas e (maiúsculas)%W
que não têm acesso a esses recursos.O delimitador usado pode ter qualquer caractere, não apenas o parêntese aberto. Brinque com os exemplos acima para ver isso em vigor.
Para uma redação completa com exemplos
%w
e lista completa, caracteres de escape e delimitadores, consulte " Ruby -% w vs% W - segredos revelados! "fonte
Em vez de
%w()
usarmos%w[]
De acordo com o guia de estilo Ruby:
Prefira% w à sintaxe literal da matriz quando precisar de uma matriz de palavras (cadeias não vazias sem espaços e caracteres especiais). Aplique esta regra apenas a matrizes com dois ou mais elementos.
Use os colchetes mais adequados para os vários tipos de literais de porcentagem.
[]
para literais de matriz (%w, %i, %W, %I
), pois está alinhado com os literais de matriz padrão.Para mais leia aqui .
fonte
Extraído da documentação para Porcentagens de caracteres em http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
fonte
Recebi várias colunas de uma planilha CSV com nomes completos de usuários e precisava manter a formatação, com espaços. A maneira mais fácil de encontrá-los enquanto usava ruby era:
Isso destaca que
%()
cria uma sequência como"Porter Smith\nJimmyJones\nRonald Jackson"
e para obter a matriz comsplit
a sequência no"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Portanto, para responder também à pergunta original do OP, eles poderiam ter escrito
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
se houvessespace
quando você desejaspace
que exista na saída final da matriz.fonte