Wat betekent %w(array)?

Ik bekijk de documentatie voor FileUtils.

Ik ben in de war door de volgende regel:

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

Wat betekent de %w? Kun je me naar de documentatie verwijzen?


Antwoord 1, autoriteit 100%

%w(foo bar)is een snelkoppeling voor ["foo", "bar"]. Dit betekent dat het een notatie is om een reeks tekenreeksen te schrijven, gescheiden door spaties in plaats van komma’s en zonder aanhalingstekens eromheen. Je vindt een lijst met manieren om letterlijke waarden te schrijven in de quickref van zenspider.


Antwoord 2, autoriteit 39%

Ik beschouw %w()als een “woordarray” – de elementen worden gescheiden door spaties en het geeft een reeks strings terug.

Er zijn andere % letterlijke:

  • %r()is een andere manier om een reguliere expressie te schrijven.
  • %Q()is een andere manier om een tekenreeks tussen aanhalingstekens te schrijven (en kan uit meerdere regels bestaan, wat handig is)
  • %Q()geeft een tekenreeks met dubbele aanhalingstekens
  • %x()is een shell-opdracht
  • %i()geeft een reeks symbolen (Ruby >= 2.0.0)
  • %s()verandert fooin een symbool (:foo)

Ik ken geen anderen, maar er kunnen er daarbinnen op de loer liggen…


Antwoord 3, autoriteit 5%

Er is ook %swaarmee je symbolen kunt maken, bijvoorbeeld:

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'

Sinds Ruby 2.0.0 heb je ook:

%i( a b c )   # => [ :a, :b, :c ]
%i[ a b c ]   # => [ :a, :b, :c ]
%i_ a b c _   # => [ :a, :b, :c ]
# etc...

Antwoord 4, autoriteit 2%

%wen %wstelt u in staat een array van tekenreeksen te maken zonder aanhalingstekens en komma’s te gebruiken.


Antwoord 5, autoriteit 2%

Hoewel het een oud bericht is, blijft de vraag terugkomen en lijken de antwoorden me niet altijd duidelijk, dus hier zijn mijn gedachten:

%wen %wzijn voorbeelden van General Delimited Input types, die betrekking hebben op arrays. Er zijn andere typen waaronder %Q, %Q, %r, %xen %i.

Het verschil tussen de versie met hoofdletters en kleine letters is dat het ons toegang geeft tot de functies van enkele en dubbele aanhalingstekens. Met enkele aanhalingstekens en (kleine letters) %whebben we geen code-interpolatie (#{someCode}) en een beperkt aantal escapetekens die werken (\\, \n). Met dubbele aanhalingstekens en (hoofdletters) %whebben we weltoegang tot deze functies.

Het gebruikte scheidingsteken kan elk teken zijn, niet alleen het open haakje. Speel met de bovenstaande voorbeelden om dat effect te zien.

Voor een volledige beschrijving met voorbeelden van %wen de volledige lijst, escape-tekens en scheidingstekens, ga je naar “Ruby – %w vs %W – geheimen onthuld!


Antwoord 6

In plaats van %w()moeten we %w[]

gebruiken

Volgens Ruby-stijlgids:

Geef de voorkeur aan %w boven de letterlijke array-syntaxis als je een array van woorden nodig hebt (niet-lege tekenreeksen zonder spaties en speciale tekens erin). Pas deze regel alleen toe op arrays met twee of meer elementen.

# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]

Gebruik de accolades die het meest geschikt zijn voor de verschillende soorten letterlijke procenten.

[]voor array-literalen(%w, %i, %W, %I) omdat het is uitgelijnd met de standaard array-literalen.

# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]

Lees hiervoor meer informatie.


Antwoord 7

Uittreksel uit de documentatie voor Percent Strings op http: //ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings:

Behalve %(…) dat een String aanmaakt, kan de % andere typen objecten creëren. Net als bij strings staat een hoofdletter interpolatie en escapetekens toe, terwijl een kleine letter ze uitschakelt.

Dit zijn de typen procenttekenreeksen in robijn:

%w: reeks tekenreeksen


Antwoord 8

Ik kreeg een aantal kolommen uit een CSV-spreadsheet met volledige namen van gebruikers en ik moest de opmaak behouden, met spaties. De gemakkelijkste manier die ik vond om ze binnen te krijgen terwijl ik ruby gebruikte, was door te doen:

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

Dit benadrukt dat %()een string maakt zoals "Porter Smith\nJimmyJones\nRonald Jackson"en om de array te krijgen die u splitde string op de "\n"["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

Dus om de oorspronkelijke vraag van het OP ook te beantwoorden, hadden ze %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')kunnen schrijven als er be spacewanneer u wilt dat de spaceaanwezig is in de uiteindelijke array-uitvoer.

Other episodes