heise open source

Wiadomości i artykuły heise Open Source

24 lutego 2009, 08:07

Paweł Wilk

Co nowego w Rubym, cz. II

Tablice, wyrażenia regularne i łańcuchy znaków

W linii 1.9 interpretera języka Ruby wprowadzono istotne zmiany w obsłudze tablic i łańcuchów znaków, a wyrażenia regularne obsługuje teraz biblioteka Oniguruma.

Programiści zajmujący się rozwojem języka Ruby, wydając pierwsze edycje linii 1.9 interpretera, zapowiadali, że wersje te są dobrze przystosowane do tworzenia wielojęzycznych interfejsów użytkownika. Na czym więc polegają wprowadzone w tym celu zmiany? Chodzi przede wszystkim o obsługę różnych standardów kodowania znaków, w tym takich, które do zapisu jednej litery potrzebują więcej niż jednego bajtu (np. UTF-8 czy UTF-16). We wszystkich klasach i metodach mających do czynienia z łańcuchami tekstowymi wprowadzono modyfikacje. Sprawiają one, że podstawowym elementem łańcucha nie jest oktet (ośmiobitowa liczba), ale jednoznakowy łańcuch. W ten sposób możliwa jest obsługa przez te same metody różnych form reprezentowania alfabetów.

Zmieniono również obsługę tablic, w szczególności tablic asocjacyjnych, czyli takich, które jako klucza indeksowania używają dowolnego obiektu. Przede wszystkim uproszczono składnię i inicjując hasha, można już pomijać operatory =>. Twórcy języka zadbali też o to, aby iteracja po elementach tablic asocjacyjnych zwracała elementy w takiej kolejności, w jakiej były one dodawane.

Prawie wszystkie wbudowane klasy wyposażono w metodę klasową try_convert. Jej działanie polega na próbie wywołania metody to_typ na przekazanym jako argument obiekcie, gdzie typ zostaje zastąpiony odpowiednim konwerterem. Na przykład wykonanie Array.try_convert("coś") sprawi, że nastąpi próba uruchomienia wyrażenia "coś".to_ary, oczywiście jeśli klasa String zawiera metodę to_ary. W przypadku niepowodzenia zwracany jest obiekt nil.

Spis treści

                                                                                                                              
  [anchorlink tablice]Tablice[/anchorlink]
  [anchorlink tabliceasocjacyjne]Tablice asocjacyjne[/anchorlink]
    [anchorlink orderedhash]Elementy są uporządkowane[/anchorlink]
    [anchorlink przekazywanieblokow]Dostęp do przekazanego bloku[/anchorlink]
    [anchorlink skladniahasha]Nowa składnia[/anchorlink]
    [anchorlink comparebyidentity]Tożsamość obiektów jako klucz[/anchorlink]
    [anchorlink objectpairs]Dostęp do par obiektów[/anchorlink]
    [anchorlink innezmianyhash]Pozostałe zmiany[/anchorlink]
  [anchorlink symbole]Symbole[/anchorlink]
    [anchorlink zerolengthsymbols]Symbole o zerowej długości[/anchorlink]
    [anchorlink intern]Metoda [VERBATIM29][/anchorlink]
  [anchorlink strings]Łańcuchy znaków[/anchorlink]
    [anchorlink enumerablestrings]Łańcuchy nie są w pełni typem wyliczeniowym[/anchorlink]
    [anchorlink stringsencoding]Rozróżnianie sposobu kodowania znaków[/anchorlink]
    [anchorlink stringatoms]Operacje atomowe[/anchorlink]
    [anchorlink kodowanieznakow]Kodowanie znaków[/anchorlink]
    [anchorlink stringzmiany]Inne nowe i zmienione metody[/anchorlink]
  [anchorlink regexp]Wyrażenia regularne[/anchorlink]
    [anchorlink oniguruma]Nowa biblioteka[/anchorlink]
    [anchorlink klasaregexp]Klasa [VERBATIM30] i kodowanie znaków[/anchorlink]
    [anchorlink patternmatching]Dopasowywanie symboli do wzorców[/anchorlink]
    [anchorlink matchpos]Początkowa pozycja dopasowywania[/anchorlink]
    [anchorlink namedgroups]Grupy nazwane[/anchorlink]
    [anchorlink matchdata]Klasa [VERBATIM31][/anchorlink]

  • Podziel się
  • Wykop.pl
  • StumbleUpon
  • del.icio.us
  • OSnews.pl