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 %wsignifica isso? Você pode me indicar a documentação?
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 %wsignifica isso? Você pode me indicar a documentação?
Respostas:
%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 transforma fooem um símbolo ( :foo)Eu não conheço outros, mas pode haver alguns por aí ...
%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" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
Também existe o %sque permite criar qualquer símbolo, por exemplo:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
Desde o Ruby 2.0.0, você também tem:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%We%w permite criar uma matriz de seqüências de caracteres sem usar aspas e vírgulas.
Embora seja um post antigo, a pergunta continua aparecendo e as respostas nem sempre parecem claras para mim, então, eis os meus pensamentos:
%we %Wsão exemplos de tipos de entrada delimitada geral , relacionados a matrizes. Existem outros tipos que incluem %q, %Q, %r, %xe %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) %Wque 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 %we lista completa, caracteres de escape e delimitadores, consulte " Ruby -% w vs% W - segredos revelados! "
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.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
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.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Para mais leia aqui .
Extraído da documentação para Porcentagens de caracteres em http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
Além de% (...) que cria uma String, o% pode criar outros tipos de objetos. Como nas seqüências de caracteres, uma letra maiúscula permite interpolação e caracteres de escape enquanto uma letra minúscula os desativa.
Estes são os tipos de seqüências de caracteres de porcentagem em ruby:
...
% w : Matriz de seqüências de caracteres
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:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
Isso destaca que %()cria uma sequência como "Porter Smith\nJimmyJones\nRonald Jackson"e para obter a matriz com splita 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 houvesse spacequando você deseja spaceque exista na saída final da matriz.