String Literals

Stringobjecten bevatten geordende reeksen bytes, meestal tekens, meestal om stukken leesbare tekst te vormen. Ze zijn een veel voorkomend objecttype in alle programmeertalen en Ruby heeft een aantal manieren op hoog niveau en een paar manieren om String-objecten te maken, te openen en te manipuleren.

Tekenreeksen worden meestal gemaakt met een Letterlijke tekenreeks. Een letterlijke is een speciale syntaxis in de Ruby-taal die een object van een specifiek type maakt. Bijvoorbeeld, 23 is een letterlijke die een creëert Fixnum voorwerp. Wat String literals betreft, er zijn verschillende vormen.

Enkele aanhalingstekens en dubbele aanhalingstekens

De meeste talen hebben een letterlijke tekenreeks die hierop lijkt, dus dit is misschien bekend. De soorten aanhalingstekens ', (enkele aanhalingstekens, apostrof of moeilijk citaat) en "(dubbele aanhalingstekens of zacht citaat) worden gebruikt om stringliteralen in te sluiten, alles daartussen wordt omgezet in String-objecten. Het volgende voorbeeld laat dit zien.

Maar er zijn enkele verschillen tussen enkele en dubbele aanhalingstekens. Dubbele aanhalingstekens of zachte aanhalingstekens laat wat magie achter de schermen gebeuren. Het handigst is interpolatie binnen strings, handig voor het invoegen van de waarde van een variabele in het midden van een string. Dit wordt bereikt met behulp van de # … volgorde. In het volgende voorbeeld wordt u om uw naam gevraagd en wordt u begroet met behulp van interpolatie om uw naam in te voegen in de letterlijke tekenreeks die wordt afgedrukt.

Merk op dat elke code tussen accolades kan komen, niet alleen variabelenamen. Ruby zal die code evalueren en wat er ook wordt geretourneerd, probeert deze in de string in te voegen. Dus je zou het net zo gemakkelijk kunnen zeggen "Hallo, # gets.chomp" en vergeet de naam variabel. Het is echter een goede gewoonte om geen lange uitdrukkingen in de accolades te plaatsen.

Enkele aanhalingstekens, apostrofs of harde citaten zijn veel beperkter. Binnen de enkele aanhalingstekens zal Ruby geen andere interpolatie- of escape-reeksen uitvoeren dan het enkele aanhalingsteken en de backslash zelf (\' en \\ respectievelijk). Als u niet van plan bent om interpolatie te gebruiken, is het raadzaam om vaker enkele aanhalingstekens te gebruiken.

In het volgende voorbeeld wordt geprobeerd een variabele binnen enkele aanhalingstekens te interpoleren.

Als u dit uitvoert, krijgt u geen fouten, maar wat er wordt afgedrukt?

De interpolatiesequentie werd niet geïnterpreteerd doorgevoerd.

Wanneer moet ik enkele en dubbele aanhalingstekens gebruiken?

Dit is een kwestie van stijl. Sommigen geven er de voorkeur aan om altijd dubbele aanhalingstekens te gebruiken, tenzij ze ongemakkelijk worden. Anderen gebruiken liever enkele aanhalingstekens tenzij het interpolatiegedrag is bedoeld. Er is niets inherent gevaarlijk over het gebruik van dubbele aanhalingstekens de hele tijd, maar het maakt sommige code gemakkelijker te lezen. U hoeft geen string te lezen bij het doorlezen van code als u weet dat er geen interpolaties in zitten omdat u weet dat de string zelf geen bijwerkingen heeft. Dus welke letterlijke tekenreeks je gebruikt, is aan jou, er is geen echte juiste en verkeerde manier hier.

Escape-reeksen

Wat als u in een letterlijke tekenreeks een aanhalingsteken wilt opnemen? Bijvoorbeeld de string "Steve zei:" Moo! " zal niet werken. En dat zal ook niet 'Kan dit niet aanraken!'. Beide reeksen bevatten het aanhalingsteken in de string, waardoor de string letterlijk wordt beëindigd en een syntaxisfout wordt veroorzaakt. U kunt tussen aanhalingstekens schakelen, zoals 'Steve zei:' Moo! '', maar dat lost het probleem niet echt op. In plaats daarvan kunt u ontsnappen aan elk aanhalingsteken binnen de tekenreeks en verliest het zijn speciale betekenis (in dit geval is de speciale betekenis het sluiten van de tekenreeks).

Om aan een personage te ontsnappen, plaats je het voor het backslash-teken. Het backslash-teken geeft Ruby de opdracht om elke speciale betekenis van het volgende teken te negeren. Als het een overeenkomend aanhalingsteken is, moet u de tekenreeks niet beëindigen. Als het een hekje is, start u geen interpolatieblok. Het volgende voorbeeld toont dit gebruik van backslash om speciale tekens te ontsnappen.

Het backslash-teken kan worden gebruikt om een ​​speciale betekenis uit het volgende teken te verwijderen, maar verwarrend genoeg kan het ook worden gebruikt om speciaal gedrag in tekenreeksen met dubbele aanhalingstekens aan te geven. De meeste van deze speciale gedragingen hebben te maken met het invoegen van tekens en byte-reeksen die niet visueel kunnen worden getypt of weergegeven. Niet alle tekenreeksen zijn tekenreeksen of kunnen besturingsreeksen bevatten die bedoeld zijn voor de terminal en niet voor de gebruiker. Ruby geeft je de mogelijkheid om dit soort tekenreeksen in te voegen met behulp van het backslash escape-teken.

  • \ n - Een teken voor een nieuwe regel. De puts methode doet dit automatisch, maar als u er een in het midden van een string wilt invoegen, of de string is bestemd voor iets anders dan de puts methode, kunt u dit gebruiken om een ​​nieuwe regel in een string in te voegen.
  • \ t - Een tab-teken. Het tab-teken verplaatst de cursor (op de meeste terminals) naar een veelvoud van 8, dus dit is erg handig voor het weergeven van tabelgegevens. Er zijn echter betere manieren om dit te doen, en het gebruik van het tab-teken wordt als een beetje archaïsch of hackish beschouwd.
  • \ nnn - Een backslash gevolgd door 3 cijfers geeft een ASCII-teken aan dat wordt voorgesteld door 3 octale cijfers. Waarom octaal? Meestal om historische redenen.
  • \ xnn - Een backslash, een x en 2 hexadecimale cijfers. Hetzelfde als de octale versie, alleen met hex cijfers.

Je zult de meeste hiervan waarschijnlijk nooit gebruiken, maar weet dat ze bestaan. En onthoud ook dat ze alleen werken in dubbele aanhalingstekens.