Literały ciągów

Przez ramię z bliska męski pracownik biurowy patrzący na laptopa w biurze

Kultura RM Exclusive/Stefano Gilera/Getty Images





Obiekty ciągów trzymają uporządkowane sekwencje bajtów, zazwyczaj znaków, zwykle tworzących fragmenty tekstu czytelnego dla człowieka. Są bardzo powszechnym typem obiektów we wszystkich językach programowania iRubinma wiele wysokopoziomowych i kilka niskopoziomowych sposobów tworzenia, uzyskiwania dostępu i manipulowania obiektami String.

Struny są najczęściej tworzone za pomocą Literał ciągu . A dosłowny to specjalna składnia w języku Ruby, która tworzy obiekt określonego typu. Na przykład, 23 to literał, który tworzy ​ Fixnum obiekt. Jeśli chodzi o literały String, istnieje kilka form.



Cytaty pojedyncze i ciągi cudzysłowów podwójnych

Większość języków ma literał String podobny do tego, więc może to być znajome. Rodzaje cudzysłowów, ' (pojedynczy cytat, apostrof lub twardy cytat ) i ' (podwójny cudzysłów lub miękki cytat ) są używane do zamykania literałów łańcuchowych, wszystko pomiędzy nimi zostanie przekształcone w obiekty String. Poniższy przykład ilustruje to.

Ale istnieją pewne różnice między cudzysłowami pojedynczymi i podwójnymi. Podwójne cudzysłowy lub miękkie cytaty umożliwić trochę magii za kulisami. Najbardziej użyteczna jest interpolacja wewnątrz łańcuchów, przydatna do wstawiania wartości zmiennej w środku łańcucha. Osiąga się to za pomocą #{…} sekwencja. Poniższy przykład poprosi Cię o Twoje imię i przywita Cię, używając interpolacji, aby wstawić Twoje imię do drukowanego literału ciągu.



Zauważ, że w nawiasach klamrowych może znaleźć się dowolny kod, a nie tylko nazwy zmiennych. Ruby oceni ten kod i cokolwiek zostanie zwrócone, spróbuje wstawić go do łańcucha. Więc możesz równie łatwo powiedzieć 'Witaj, #{gets.chomp}' i zapomnij o Nazwa zmienny. Jednak dobrą praktyką jest nie umieszczanie długich wyrażeń w nawiasach klamrowych.

Pojedyncze cytaty, apostrofy lub twarde cytaty są znacznie bardziej restrykcyjne. Wewnątrz pojedynczych cudzysłowów Ruby nie wykona interpolacji lub Sekwencje ewakuacyjne inne niż uniknięcie znaku pojedynczego cudzysłowu i samego odwrotnego ukośnika ( ' oraz \ odpowiednio). Jeśli nie zamierzasz używać interpolacji, zaleca się częstsze używanie pojedynczych cudzysłowów.

Poniższy przykład spróbuje interpolować zmienną wewnątrz pojedynczych cudzysłowów.

Jeśli to uruchomisz, nie otrzymasz błędu, ale co zostanie wydrukowane?



Sekwencja interpolacji została przekazana bez interpretacji.

Kiedy powinienem używać pojedynczych i podwójnych cytatów

To kwestia stylu. Niektórzy wolą używać podwójnych cudzysłowów przez cały czas, chyba że staną się niewygodne. Inni wolą używać pojedynczych cudzysłowów, chyba że interpolacja jest zamierzona. Nie ma nic z natury niebezpieczny o używaniu podwójnych cudzysłowów przez cały czas, ale ułatwia to odczytanie kodu. Nie musisz czytać ciągu podczas czytania kodu, jeśli wiesz, że nie ma w nim interpolacji, ponieważ wiesz, że sam ciąg nie będzie miał żadnych skutków ubocznych. Tak więc, jaką formę literału ciągu użyjesz, zależy od Ciebie, nie ma tutaj prawdziwej i złej drogi.



Sekwencje ewakuacyjne

Co się stanie, jeśli w literale ciągu chcesz umieścić znak cudzysłowu? Na przykład ciąg – Steve powiedział „Muu!” nie zadziała. I nie będzie - Nie możesz tego dotknąć! . Oba te ciągi zawierają znak cudzysłowu wewnątrz ciągu, skutecznie kończąc literał ciągu i powodując błąd składni. Możesz zmienić znaki cytatu, na przykład „Steve powiedział „Muu!” , ale to nie rozwiązuje problemu. Zamiast tego możesz zmienić znaczenie dowolnego znaku cudzysłowu w łańcuchu i straci on swoje specjalne znaczenie (w tym przypadku specjalnym znaczeniem jest zamknięcie łańcucha).

Aby zmienić znak, poprzedź go znakiem odwrotnego ukośnika. Znak odwrotnego ukośnika mówi Rubiemu, aby zignorował wszelkie specjalne znaczenie, jakie może mieć następny znak. Jeśli jest to pasujący znak cudzysłowu, nie kończ ciągu. Jeśli jest to znak mieszający, nie rozpoczynaj bloku interpolacji. Poniższy przykład ilustruje użycie ukośnika odwrotnego do ucieczki znaków specjalnych.



Znak odwrotnego ukośnika może być użyty do usunięcia dowolnego specjalnego znaczenia z następującego znaku, ale może być również użyty do oznaczenia specjalnego zachowania w łańcuchach w podwójnych cudzysłowach. Większość z tych specjalnych zachowań dotyczy wstawiania znaków i sekwencji bajtów, których nie można wpisać ani przedstawić wizualnie. Nie wszystkie Stringi są łańcuchami znaków lub mogą zawierać sekwencje sterujące przeznaczone dla terminala, a nie dla użytkownika. Ruby daje możliwość wstawiania tych typów łańcuchów za pomocą znaku ucieczki odwrotnego ukośnika.

  • — znak nowej linii. The stawia Metoda robi to automatycznie, ale jeśli chcesz wstawić ją w środku ciągu lub ciąg jest przeznaczony do czegoś innego niż stawia metody, możesz użyć tego do wstawienia nowej linii w ciągu.
  • — znak tabulacji. Znak tabulacji przesuwa kursor (na większości terminali) do wielokrotności 8, więc jest to bardzo przydatne przy wyświetlaniu danych tabelarycznych. Są jednak lepsze sposoby na zrobienie tego, a używanie znaku tabulacji jest uważane za nieco archaiczne lub hackowe.
  • nn - Odwrotny ukośnik, po którym następują 3 liczby, oznacza znak ASCII reprezentowany przez 3 cyfry ósemkowe. Dlaczego ósemkowe? Głównie ze względów historycznych.
  • xnn — ukośnik odwrotny, x i 2 cyfry szesnastkowe. Taka sama jak wersja ósemkowa, tylko z cyframi szesnastkowymi.

Prawdopodobnie nigdy nie użyjesz większości z nich, ale wiedz, że istnieją. Pamiętaj też, że działają one tylko w ciągach cudzysłowów.



Na następnej stronie omówiono ciągi wielowierszowe i alternatywną składnię dla literałów ciągów.

Ciągi wieloliniowe

Większość języków nie zezwala na wielowierszowe literały łańcuchowe, ale Ruby tak. Nie ma potrzeby kończenia ciągów i dołączania kolejnych ciągów do następnego wiersza, Ruby obsługuje wielowierszowe literały ciągów dobrze z domyślnym składnia .

Składnia alternatywna

Podobnie jak w przypadku większości innych literałów, Ruby zapewnia alternatywną składnię dla literałów łańcuchowych. Jeśli na przykład używasz wielu cudzysłowów w swoich literałach, możesz użyć tej składni. Gdy używasz tej składni, jest to kwestia stylu, zwykle nie są one potrzebne w przypadku łańcuchów.

Aby użyć alternatywnej składni, użyj następującej sekwencji dla ciągów w pojedynczym cudzysłowie: %q{ … } . Podobnie użyj następującej składni dla ciągów w cudzysłowie: %Q{ … } . Ta alternatywna składnia podlega tym samym regułom, co ich „normalni” kuzyni. Pamiętaj też, że możesz użyć dowolnych znaków zamiast nawiasów klamrowych. Jeśli użyjesz nawiasu klamrowego, nawiasu kwadratowego, nawiasu kątowego lub nawiasu, pasujący znak zakończy literał. Jeśli nie chcesz używać pasujących znaków, możesz użyć dowolnego innego symbolu (wszystko, co nie jest literą ani cyfrą). Literał zostanie zamknięty innym o tym samym symbolu. Poniższy przykład pokazuje kilka sposobów użycia tej składni.

Alternatywna składnia działa również jako ciąg wielowierszowy.