Zrozumienie literałów ciągowych w języku Ruby

Obiekty łańcuchowe są trzymane uporządkowane sekwencje bajtów, zwykle znaków, zwykle w celu utworzenia fragmentów tekstu czytelnego dla człowieka. Są bardzo popularnym typem obiektu we wszystkich językach programowania i Rubin ma wiele wysokopoziomowych i kilka niskopoziomowych sposobów tworzenia, uzyskiwania dostępu i manipulowania obiektami String.

Ciągi są najczęściej tworzone za pomocą Dosłowny ciąg. ZA dosłowny to specjalna składnia w języku Ruby, która tworzy obiekt określonego typu. Na przykład, 23 jest literałem, który tworzyFixnum obiekt. Jeśli chodzi o literały łańcuchowe, istnieje kilka form.

Cudzysłowy i ciągi podwójnie cytowane

Większość języków ma dosłowny ciąg znaków podobny do tego, więc może to być znane. Rodzaje cytatów ”(pojedynczy cytat, apostrof lub trudny cytat) i ”(podwójny cytat lub miękki cytat) są używane do zamykania literałów ciągów, wszystko między nimi zostanie przekształcone w obiekty String. Poniższy przykład to pokazuje.

Istnieją jednak pewne różnice między pojedynczymi i podwójnymi cudzysłowami. Podwójne cytaty lub

instagram viewer
miękkie cytaty Umożliwić trochę magii za kulisami. Najbardziej użyteczna jest interpolacja wewnątrz ciągów, przydatna do wstawiania wartości zmiennej na środku ciągu. Osiąga się to za pomocą #{ … } sekwencja. Poniższy przykład poprosi cię o twoje imię i pozdrowienia, używając interpolacji, aby wstawić twoje imię do literału ciągu, który jest drukowany.

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

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

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

Jeśli to uruchomisz, nie pojawi się błąd, ale co zostanie wydrukowane?

Sekwencja interpolacji została przepuszczona przez niezinterpretowaną.

Kiedy powinienem stosować pojedyncze i podwójne cudzysłowy

To kwestia stylu. Niektórzy wolą używać podwójnych cudzysłowów przez cały czas, chyba że stają się niewygodne. Inni wolą używać pojedynczych cudzysłowów, chyba że zamierzone jest zachowanie interpolacyjne. 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ć łańcucha podczas czytania kodu, jeśli wiesz, że nie ma w nim interpolacji, ponieważ wiesz, że sam łańcuch nie będzie miał żadnych skutków ubocznych. Tak więc, którą literalną formę łańcucha używasz, zależy od ciebie, nie ma tutaj prawdziwej dobrej i złej drogi.

Sekwencje ewakuacyjne

Co jeśli dosłowny ciąg znaków ma zawierać znak cudzysłowu? Na przykład ciąg Steve powiedział „Moo!” nie zadziała. I nie będzie „Nie mogę tego dotknąć!”. Oba te ciągi zawierają znak cudzysłowu wewnątrz łańcucha, skutecznie kończąc literał łańcucha i powodując błąd składniowy. Możesz zamienić znaki cudzysłowu, jak Steve powiedział „Moo!”, ale tak naprawdę to nie rozwiązuje problemu. Zamiast tego możesz uciec od dowolnego znaku cudzysłowu w łańcuchu i straci on swoje specjalne znaczenie (w tym przypadku szczególnym znaczeniem jest zamknięcie łańcucha).

Aby uciec od znaku, należy dodać znak odwrotnego ukośnika. Odwrotny ukośnik mówi Ruby, aby zignorowała jakiekolwiek specjalne znaczenie, które może mieć następna postać. Jeśli jest to pasujący znak cudzysłowu, nie kończ łańcucha. Jeśli jest to znak skrótu, nie uruchamiaj bloku interpolacji. Poniższy przykład demonstruje użycie odwrotnego ukośnika do zmiany znaków specjalnych.

Znaku odwrotnego ukośnika można użyć do usunięcia jakiegokolwiek specjalnego znaczenia z poniższego znaku, ale, myląco, można go również użyć do oznaczenia specjalnego zachowania w ciągach cudzysłowów. Większość tych specjalnych zachowań dotyczy wstawiania znaków i sekwencji bajtów, których nie można wpisać ani przedstawić wizualnie. Nie wszystkie ciągi są ciągami znaków lub mogą zawierać sekwencje kontrolne przeznaczone dla terminala, a nie dla użytkownika. Ruby daje możliwość wstawiania tego typu ciągów znaków za pomocą odwrotnego ukośnika.

  • \ n - znak nowej linii. The stawia Metoda robi to automatycznie, ale jeśli chcesz wstawić jeden w środku łańcucha lub łańcuch jest przeznaczony do czegoś innego niż stawia Można użyć tej metody do wstawienia nowego wiersza w ciągu.
  • \ t - znak tabulacji. Znak tabulacji przesuwa kursor (w większości terminali) do wielokrotności 8, więc jest to bardzo przydatne do wyświetlania danych tabelarycznych. Istnieją jednak lepsze sposoby, aby to zrobić, a używanie znaku tabulacji jest uważane za nieco archaiczne lub hackerskie.
  • \ nnn - Ukośnik odwrotny, po którym następują 3 cyfry, oznacza znak ASCII reprezentowany przez 3 cyfry ósemkowe. Dlaczego ósemkowy? Głównie z powodów historycznych.
  • \ xnn - Ukośnik odwrotny, x i 2 cyfry szesnastkowe. To samo co 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.

Następna strona omawia ciągi wieloliniowe i alternatywną składnię literałów łańcuchowych.

Ciągi wieloliniowe

Większość języków nie pozwala na wieloliniowe literały łańcuchowe, ale Ruby tak. Nie ma potrzeby kończenia ciągów i dodawania kolejnych ciągów do następnego wiersza, Ruby dobrze radzi sobie z wieloliniowymi literałami ciągów z domyślnymi składnia.

Alternatywna składnia

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

Aby użyć alternatywnej składni, użyj następującej sekwencji dla łańcuchów pojedynczych % q {…}. Podobnie użyj następującej składni dla ciągów cudzysłowów % Q {…}. Ta alternatywna składnia podlega tym samym regułom, co ich „normalni” kuzyni. Pamiętaj też, że zamiast nawiasów klamrowych możesz używać dowolnych znaków. 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 (cokolwiek innego niż litera lub cyfra). Dosłowność zostanie zamknięta innym o tym samym symbolu. Poniższy przykład pokazuje kilka sposobów korzystania z tej składni.

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