[nem-pl] Framework i tablice

"Paweł W. Olszta" Pawel.Olszta at adv.pl
Tue Nov 18 11:04:30 CET 2003


Michal Moskal wrote:

>On Sat, Nov 15, 2003 at 04:17:16PM +0100, olszta at tey.pl wrote:
>  
>
>>Zaczalem tez pisac generator do naglowkow w Nemerlu, ale okazuje sie, 
>>ze trzeba dodac obsluge dla tablic, wiec ja dodaje.
>>
>>Bedzie jakos tak:
>>
>>mutable moje_typy : array (System.Type);
>>    
>>
>
>A co z tablicami wielowymiarowymi? IMHO trzeba to od razu przemyśleć,
>żeby potem nie zmieniać.
>
>Bo co z tablicami tablic to wiadomo:
>
>  array (array (System.Type))
>
>Może jednak lepiej "System.Type []", "System.Type [,,]". Z drugiej
>strony z array jest mniej specjalnej składni. Co do wielowymiarowych,
>to może:
>
>  array (System.Type)  // w C# System.Type []
>  array (1, System.Type)  // w C# System.Type []
>  array (2, System.Type)  // w C# System.Type [,]
>  array (array (System.Type))  // w C# System.Type [][]
>  
>
Może array <2> (System.Type)? Chociaż też nie. [,] jest świetną notacją, 
tylko chyba
raczej nie pasuje do Nemerle. Przemyślimy to dzisiaj.

>>moje_typy [|"System.Int32"|] = System.Int32.GetType ();
>>    
>>
>
>  moje_typy.["System.Int32"] <- System.Int32.GetType ()
>  moje_typy["System.Int32"] <- System.Int32.GetType ()
>
>Ale nie jestem przekonany ;-)
>  
>
moje_typy [|"System.Int32"|] <- System.Int32.GetType ();

[x] nie możemy -- bo to oznacza listę jednoelementową.

>>gdzie miedzy [| i |] leca parametry indekserow (poki co jeden).
>>    
>>
>
>Jeśli do tablic to inty, a do innych klas może być cokolwiek, jak
>rozumiem?
>  
>
Tak, tablica to taki obiekt z indekserem typu int -> 'a. W hasztablicy 
jest object -> 'a.
Mogą być wielowymiarowe chyba, później popatrzę do definicji C#.

>>Nie wiem jak to powinno wygladac z mutowalnoscia, ale to sie
>>wszystko przemysli. 
>>    
>>
>
>IMHO wszystkie tablice są mutowalne. Znaczy to jest legalny kod:
>
>def ar = Array.Create ("foo", 10);
>ar.[3] <- "bar";
>mutable ar2 = Array.Create ("qux", 10);
>ar2.[3] <- "bar";
>ar2 <- Array.Create ("quxx", 10);
>
>Nazwa tablic (ar, ar2) definuje tylko wskaźnik do obiektu na heapie. To
>czy można go zmieniać to jedna sprawa, to czy można zmieniać obiekt to
>druga.
>
>Przy czym z Array.Create (czy jak to się tam nazywa) będzie problem z
>tablicami wielowymiarowymi. Nie wiem dokładnie jak to w .NET działa.
>
>Oczywiście mogą być obiekty, które nie mają indeksera z set (tylko z
>get), wtedy nie można przypisywać.
>  
>
Dobrze prawisz.

-- 
Pawel W. Olszta
<olszta at adv.pl>

"No," said the elevator miserably, "of the future..."







More information about the devel-pl mailing list