Matrizes Ruby:% w vs% W

152

Qual é a diferença?

Allyn
fonte
18
"% w" é minha resposta habitual para pessoas que ficam um pouco convencidas com a legibilidade do Ruby. Funciona sempre.
22710 Craig Stuntz
agora você tem uma resposta ainda melhor :-)
errata 23/11
6
Como uma observação lateral irrelevante, o URL desta pergunta me confundiu por um tempo enquanto a página estava carregando.
Fund Monica's Lawsuit

Respostas:

233

% w aspas como aspas simples ''(sem interpolação variável, menos seqüências de escape), enquanto% W aspas como aspas duplas "".

irb(main):001:0> foo="hello"
=> "hello"
irb(main):002:0> %W(foo bar baz #{foo})
=> ["foo", "bar", "baz", "hello"]
irb(main):003:0> %w(foo bar baz #{foo})
=> ["foo", "bar", "baz", "\#{foo}"]
Brian Campbell
fonte
Seu exemplo mostra aspas duplas para% w também. Está correto?
Foton
Sim. Ao imprimir, Ruby sempre usa aspas duplas e escapa caracteres como #. '#{foo}'e "\#{foo}"dar-lhe a mesma corda, que você pode verificar com o '#{foo}' == "\#{foo}"no irb.
Brian Campbell
É pouco confuso à primeira vista, mas obrigado pela explicação.
Foton
29

Um aplicativo que encontrei para% W vs% w:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
aaandre
fonte
12
Embora, neste caso, seja provavelmente mais fácil de fazergreetings = %w(hi hello how\ do\ you\ do)
dinjas
21

% W executa substituições normais de aspas duplas. % w não.

Brian
fonte
11

Embora seja um post antigo, a pergunta continua aparecendo e as respostas nem sempre parecem claras para mim. Então, aqui estão 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 maiúsculas e minúsculas é que ela nos dá acesso aos recursos de aspas simples e duplas. Com aspas simples e% w minúsculas, não temos interpolação de código (por exemplo, # {someCode}) e um intervalo limitado de caracteres de escape que funcionam (por exemplo, \, \ n). Com aspas duplas e% maiúscula 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 gravação completa com exemplos de% w e a lista completa, caracteres de escape e delimitadores - consulte: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

Marca

Mark C
fonte
1
Esse é um bom artigo. Eu não sabia que você pode criar cordas ou outras coisas da mesma maneira e os caracteres anexos podem ser o que você quiser. Por exemplo,%w&readable af&
Dex
1

%Wé usado para elementos de matriz com aspas duplas %Q, como , por exemplo,

foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]

%wé usado para elementos de matriz com aspas simples como %q.

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
Faruk Hossen
fonte
0
array = %w(a b c d) 

Igual a

array = ["a", "b", "c", "d"]

%w é um símbolo de atalho para as aspas da string!

Kasem007
fonte