Tablice Ruby:% w vs% W

152

Jaka jest różnica?

Allyn
źródło
18
„% w” to moja zwykła odpowiedź dla ludzi, którzy są zbyt zarozumiali, jeśli chodzi o czytelność Rubiego. Działa za każdym razem.
Craig Stuntz
teraz masz jeszcze lepszą odpowiedź :-)
errata
6
Jako nieistotna uwaga na marginesie, adres URL tego pytania zmylił mnie przez chwilę podczas ładowania strony.
Załóż pozew Moniki

Odpowiedzi:

233

% w cudzysłowy jak pojedyncze cudzysłowy ''(brak interpolacji zmiennych, mniej sekwencji sterujących), a% W cudzysłowy jak cudzysłowy "".

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
źródło
Twój przykład pokazuje również podwójne cudzysłowy dla% w. Czy to jest poprawne?
Foton
Tak. Podczas drukowania danych Ruby zawsze używa cudzysłowów i znaków ucieczki, takich jak #. '#{foo}'i "\#{foo}"podam ci ten sam ciąg, który możesz zweryfikować '#{foo}' == "\#{foo}"w irb.
Brian Campbell
To trochę zagmatwane na pierwszy rzut oka, ale dzięki za wyjaśnienie.
Foton
29

Aplikacja, którą znalazłem dla% W vs% w:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]
aaandre
źródło
12
Chociaż w tym przypadku jest to łatwiejsze do zrobieniagreetings = %w(hi hello how\ do\ you\ do)
dinjas
21

% W wykonuje zwykłe podstawienia w cudzysłowie. % w nie.

Brian
źródło
11

Chociaż to stary post, pytanie wciąż się pojawia, a odpowiedzi nie zawsze wydają mi się jasne. Więc oto moje myśli.

% wi% W to przykłady typów danych wejściowych z ogranicznikami ogólnymi , które odnoszą się do tablic. Istnieją inne typy, które obejmują% q,% Q,% r,% x oraz% i.

Różnica między dużymi i małymi literami polega na tym, że daje nam dostęp do funkcji pojedynczego i podwójnego cudzysłowu. Z pojedynczymi cudzysłowami i małymi literami% w nie mamy interpolacji kodu (np. # {SomeCode}) i ograniczony zakres działających znaków zmiany znaczenia (np. \, \ N). Z cudzysłowach i wielką% wag możemy nie mieć dostęp do tych funkcji.

Użyty separator może być dowolnym znakiem, a nie tylko otwartym nawiasem. Baw się przykładami powyżej, aby zobaczyć, jak to działa.

Aby uzyskać pełny opis z przykładami% w i pełną listą, znakami ucieczki i ogranicznikami - zajrzyj na: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

znak

Marka C.
źródło
1
To dobry artykuł. Nie zdawałem sobie sprawy, że możesz tworzyć łańcuchy lub inne rzeczy w ten sam sposób, a otaczające znaki mogą być dowolne. Na przykład%w&readable af&
Dex
1

%Wjest używany dla elementów tablicy w podwójnych cudzysłowach, takich jak %Qna przykład

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

%wjest używany dla elementów tablicy w pojedynczych cudzysłowach, takich jak %q.

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

Taki sam jak

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

%w jest symbolem skrótu dla cudzysłowu w ciągu znaków!

Kasem007
źródło