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>
</pre>
Linia 185:
Moglibyśmy podzielić linię 12 na osobne linie, tak jak tutaj:
<source lang="ruby" line="GESHI_NORMAL_LINE_NUMBERS" start"12">
podswietlony = tekst.gsub(wyr,"#{st}\\&#{en}")
puts podswietlony
</
lub w "destruktywnym" stylu:
<source lang="ruby" line="GESHI_NORMAL_LINE_NUMBERS" start"12">
tekst.gsub!(wyr,"#{st}\\&#{en}")
puts tekst
</
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.
|