Ruby/Powrót do prostych przykładów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Linia 167:
 
<pre>
rubyirb(main):001:0> s1 = "teksty"
=> "teksty"
rubyirb(main):002:0> s1.chop! # To zmienia s1.
=> "tekst"
rubyirb(main):003:0> s2 = s1.chop # To tworzy zmienioną kopię pod s2,
=> "teks"
rubyirb(main):004:0> s1 # ... bez wpływu na s1.
=> "tekst"
</pre>
 
Linia 185:
Moglibyśmy podzielić linię 12 na osobne linie, tak jak tutaj:
 
<source lang="ruby" line="GESHI_NORMAL_LINE_NUMBERS" start"12">
<pre>
podswietlony = tekst.gsub(wyr,"#{st}\\&#{en}")
puts podswietlony
</presource>
 
lub w "destruktywnym" stylu:
 
<source lang="ruby" line="GESHI_NORMAL_LINE_NUMBERS" start"12">
<pre>
tekst.gsub!(wyr,"#{st}\\&#{en}")
puts tekst
</presource>
 
Spójrz ponownie na ostatnią część linii 12. <tt>st</tt> i <tt>en</tt> były zdefiniowane w liniach 1-2 jako sekwencje ANSI które odpowiednio zmieniają i przywracają kolor tekstu. W linii 12 są one zawarte w <tt>#{}</tt> by w ten sposób były właściwie interpretowane (i nie wystąpiły zamiast nich nazwy zmiennych). Pomiędzy nimi widzimy <tt>\\&</tt>. Jest to trochę podstępne. Ponieważ podstawiany łańcuch zawarty jest w cudzysłowach (podwójnych), para odwróconych ukośników będzie zinterpretowana jako jeden ukośnik, co <tt>gsub</tt> zobaczy właściwie jako <tt>\&</tt>. To spowoduje powstanie specjalnego kodu, który z kolei odwoła się do czegokolwiek, co jako pierwsze będzie pasować do wzorca. Tak więc nowy łańcuch, gdy będzie wyświetlony będzie wyglądał tak jak pierwszy z wyjątkiem tego, że te fragmenty które pasują do wzorca będą wyświetlone w odwróconych kolorach.