Řetezcové konstnty jsou v zásadě dvojího druhu: expandující (interpolující) a neexpandující (neinterpolující). Uvnitř expandujících dochází k nahrazení posloupnosti #{varname} hodnotou proměnné varname a rovněž se používá znak '\' pro vkládání řídicích i jiných znaků. Uvnitř neexpandujících se neprovádí interpolace (expanze) řetěžců začínajících znakem '#' a '\' je omezeno jen na dvě posloupnosti \\ a \'.
Nejdříve tedy popíši neexpandující řetězce (řetězcové konstanty). Tyto jsou začínají a končí znakem apostrof '. Zápis se může rozprostírat i přes několik řádků. V takovém případě je znak konce řádku součástí řetězce.
retezec = 'První řádek. Druhá řádek.'
irb(main):001:0>retezec = 'První řádek.irb(main):002:0'Druhý řádek.'=> "Prvn\303\255 \305\231\303\241dek.\nDruh\303\275 \305\231\303\241dek."irb(main):003:0>puts retezecPrvní řádek. Druhý řádek. => nil
Pokud potřebujeme v řetězci použít znak ', můžeme jej označit pomocí zpětného lomítka. Větu "I'm ready." zapíšeme
irb(main):005:0>veta = 'I\'m ready.'=> "I'm ready."irb(main):006:0>puts vetaI'm ready. => nil
Znak obráceného lomítka má před jiným znakem obráceného lomítka také speciální význam. Je to proto, abychom mohli zapsat \'.
irb(main):007:0>s = '\\\''=> "\\'"irb(main):008:0>s = '\\'=> "\\"
Expandující (interpolující) řetězce expandují (interpolují) větší sadu znaků. Jednak je to již zmíněné obrácené lomítko pomocí kterého lzě zadávat řídicí posloupnosti jako \n \a \b \f … a expanze proměnných pomocí #.
Tabulka 5.1. Použití obráceného lomítka pro zápis znaků
| posloupnost | význam |
|---|---|
\
| Obrácené lomítko před znakem x mění význam je-li to jeden ze znaků: abcefnrstuvxCM01234567\#" |
\a | ASCII kód 7 (BEL). Stejné jako \C-g nebo \007. |
\b | ASCII kód 8 (BackSpace). Stejné jako \C-h nebo \010. |
\e | ASCII kód 27 (ESC). Stejné jako \033. |
\f | ASCII kód 12 (FF). Stejné jako \C-l nebo \014. |
\n | ASCII kód 10 (NewLine). Stejné jako \C-j nebo \012. |
\r | ASCII kód 13 (CR). Stejné jako \C-m nebo \015. |
\s | ASCII kód 32 (SP). Vkládá mezeru, tedy stejné jako " ". |
\t | ASCII kód 9 (TAB). Stejné jako \C-i nebo \011. |
\u | Unikódový znak vyjádřený čtyřmi hexadecimálními číslicemi n. Podporováno v Ruby 1.9 a vyšším. |
\u{ | Unikódový znak vyjádřený hexadecimálním číslem hexa. Ruby 1.9 a novější. |
\v | ASCII kód 11 (VT). Stejné jako \C-k nebo \013. |
\ | ASCII znak jehož oktalový kód je nnn. |
\ | Stejné jako \0. |
\ | Stejné jako \00. |
\x | ASCII znak jehož hexadecimální kód je nn. |
\x | Stejné jako \x0. |
\c | Zkratka pro \C-x |
\C- | Znak jenž má v ASCII reprezentaci nejvyšší dva bity v bajtu nastaveny na 0. |
\M- | Znak jenž má v ASCII reprezentaci nejvyšší bit v bajtu nastaven na 1. \M může být kombinováno s \C. |
\EOL | Lomítko na konci řádku spojuje řádek s následujícím. Tedy posloupnost \ a znak konce řádku je odstraněna. |
Expandující jsou například:
"řetězec se substitucí #{var}"
%Q/řetězec.../
%Q:řetězec...:
Neexpandující pak:
'řetězec'
%q[taky řetězec]
%q(samozřejmě řetězec)
%q!už mě to přestává bavit!
Jak jste si na ukázkách mohli všimnout, mimo obvyklé znaky pro uvození řetězců " a ' je možnou použít %q formu.
Malé q pro neexpandující a velké Q pro expandující řetězce. V tomto tvaru je řetězec vymezen znakem jenž následuje jako první za písmenem q(Q).
Výjimkou jsou znaky (, [ a { k nimž je odpovídající koncový znak ), ], nebo }.
Zvláštní formou jsou pak víceřádkové řetězcové konstanty. Tyto mají tvar
var = <<"EOS"
Toto je víceřádkový řetězec
se substitucí. Hodnota Proměnné
var je #{var}
EOSirb(main):001:0>pozdrav = <<TADY + <<TAM + "World"irb(main):002:0"Helloirb(main):003:0"TADYirb(main):004:0"Thereirb(main):005:0"TAM=> "Hello\nThere\nWorld"irb(main):006:0>puts pozdravHello There World => nil
U víceřádkových řetězcových konstant je prováděna substituce. Pokud chceme substituci potlačit, použijeme
# $Id: string-literal-eof2.ses,v 1.1 2003/01/14 13:37:57 radek Exp $var = <<'EOS'variable #{a}EOS"variable \#{a}\n"p var"variable \#{a}\n"nil
Ukončovací značka víceřádkového řetězce musí být na začátku řádku. Protože nám to ne vždy vyhovuje, má ruby ješte variantu u které tato značka může být kdekoliv, ale na samostatném řádku.
a = <<-EOF
Toto je víceřádkový řetězec
ukončený značkou EOF na samostatném řádku.
Všiměte si, že značka není na začátku řádku.
EOF