Patrzę na dokumentację FileUtils.
Jestem zdezorientowany następującą linią:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Co %w
znaczy Czy możesz wskazać mi dokumentację?
%w(foo bar)
jest skrótem do ["foo", "bar"]
. Oznacza to, że zapisanie tablicy ciągów znaków oddzielonych spacjami zamiast przecinków i bez cudzysłowów to zapis. Listę sposobów pisania literałów znajdziesz w Quickref zenspider .
%w(ab\ c def) # => ["ab c", "def"]
Myślę o tym
%w()
jak o „tablicy słów” - elementy są rozdzielane spacjami i zwraca tablicę ciągów.Istnieją inne% literałów:
%r()
jest innym sposobem napisania wyrażenia regularnego.%q()
jest innym sposobem na napisanie ciągu pojedynczego cudzysłowu (i może być wielowierszowy, co jest przydatne)%Q()
daje ciąg cudzysłowu%x()
to polecenie powłoki%i()
daje tablicę symboli (Ruby> = 2.0.0)%s()
zamieniafoo
się w symbol (:foo
)Nie znam innych, ale może się tam czaić ...
źródło
%i()
do generowania tablicy symboli.%()
(lub%[]
lub%{}
), który daje ciąg podwójnego cudzysłowu i unika podwójnego cudzysłowu, na przykład%Q()
. Np.%("sender name" <[email protected]>) # => "\"sender name\" <[email protected]>"
Istnieje również
%s
możliwość tworzenia dowolnych symboli, na przykład:Od Ruby 2.0.0 masz również:
źródło
%W
i%w
pozwalają tworzyć tablicę ciągów bez użycia cudzysłowów i przecinków.źródło
Choć jest to stary post, pytanie wciąż się pojawia, a odpowiedzi nie zawsze wydają mi się jasne, oto moje przemyślenia:
%w
i%W
są przykładami ogólnych typów danych ograniczonych , które odnoszą się do tablic. Istnieją inne rodzaje, które obejmują%q
,%Q
,%r
,%x
i%i
.Różnica między wersją wielkimi i małymi literami polega na tym, że daje nam dostęp do funkcji pojedynczych i podwójnych cudzysłowów. W przypadku pojedynczych cudzysłowów i (małych liter)
%w
nie mamy interpolacji kodu (#{someCode}
) i ograniczonego zakresu znaków specjalnych, które działają (\\
,\n
). Z cudzysłowach i (wielkimi literami)%W
możemy nie mieć dostęp do tych funkcji.Używanym ogranicznikiem może być dowolny znak, a nie tylko otwarty nawias. Zagraj w powyższe przykłady, aby zobaczyć, jak to działa.
Aby uzyskać pełny napis z przykładami
%w
i pełną listą, znaków ucieczki i ograniczników, zobacz „ Ruby -% w vs% W - ujawnione sekrety! ”źródło
Zamiast tego
%w()
powinniśmy użyć%w[]
Według przewodnika po stylu Ruby:
Preferuj% w względem dosłownej składni tablicy, gdy potrzebujesz tablicy słów (niepuste ciągi znaków bez spacji i znaków specjalnych). Zastosuj tę regułę tylko do tablic z dwoma lub więcej elementami.
Użyj nawiasów, które są najbardziej odpowiednie dla różnych rodzajów literałów procentowych.
[]
dla literałów tablicowych (%w, %i, %W, %I
), ponieważ jest on wyrównany ze standardowymi literałami tablicowymi.Więcej informacji tutaj .
źródło
Fragment dokumentacji ciągów procentowych pod adresem http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
źródło
Dostałem kilka kolumn z arkusza kalkulacyjnego CSV z pełnymi nazwami użytkowników i musiałem zachować formatowanie ze spacjami. Najłatwiejszym sposobem, w jaki udało mi się je zdobyć, używając rubinu, było:
Podkreśla, że
%()
tworzy ciąg podobny"Porter Smith\nJimmyJones\nRonald Jackson"
do i, aby uzyskać tablicę,split
na której znajduje się ciąg"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Aby odpowiedzieć również na pierwotne pytanie OP, mogliby napisać,
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
gdyby zdarzyło sięspace
, że chcesz,space
aby istniała w ostatecznym wyniku tablicy.źródło