[nem-pl] Framework i tablice

Michal Moskal malekith at pld-linux.org
Mon Nov 17 13:57:56 CET 2003


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 [][]

> 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 ;-)

> 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?

> 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ć.

-- 
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h




More information about the devel-pl mailing list