[nem-pl] static w interface

Lukasz Kaiser kaiser at tenet.pl
Tue Nov 4 00:04:44 CET 2003


On Mon, Nov 03, 2003 at 11:48:16PM +0100, Michal Moskal wrote:
> On Mon, Nov 03, 2003 at 11:31:20PM +0100, Lukasz Kaiser wrote:
> > No wlasnie - chcialem sobie napisac cos takiego, zeby bylo
> > 
> > interface eq ('a) { (=) ( _ : 'a, _ : 'a ) : bool ; }
> > 
> > interface comparable ('a) where 'a :> eq ('a) { 
> >     (<) ( _ : 'a, _ : 'a ) : bool ;
> > (*) (>) ( x : 'a, y : 'a ) = not ( ( x < y ) or ( x = y ) ) ;
> > }
> > 
> > module list ('a) where ('a) :> comparable ('a) implements comparable('a){
> >   'a (<) ( x : list 'a, y : list 'a ) implements 
> >     comparable.(<) = match (x,y) with [| (l::ls, m::ms) -> if (l<m) ...
> > }
> > 
> > Mam w zwiazku z tym takie pytania:
Hej.

> Wtedy sens ma tylku public lub internal. internal ma zasiêg jednego
> DLL/EXE, public -- wiadomo.

OK.
 
> class_body by³o przez minutê ;-) teraz ju¿ nie jest u¿ywane. update robi
> siê od razu.

Aaa, proxy, cache itp. Hmmm.
 
> To trzeba jeszcze przemy¶leæ. Ale teraz tak.

To jest OK przynajmniej na teraz.
 
> Operator to tylko inne nazwy funkcji statycznych. A funkcje statycznie
> *nie* mog± byæ w interface.

To mnie bardzo boli, no ale chyba musze jakos przeczekac do rozszerzen. 

> class Foo { ... }
> 
> Nie ma zmiennych, znaczy to jest monotyp (czy jak to siê nazywa, bez
> parametrów). Ale ja ciê chyba co¶ nie rozumiem.

Chyba to ja nie rozumiem. Czym sie rozni
class List { variant list 'a = ... ; static 'a list map ... } od
class List ('a) { variant list = ... to samo gdzieniegdzie bez 'a ... } ?

Inne pytanie - jak sobie symulowac funkcje wirtualne, abstrakcyjne czy
jakiestam, w kazdym razie chodzi o to zeby miec uniwersalny (<), (>),
(<=) itd. dla wszystkiego co implementuje jakas funkcje compare - jak to
zrobic ? Oczywiscie moge
let mk<= ( compare ) = fun (x,y) => if compare (x,y) > 0 then false else
true ; 
ale pytam sie jak powinienem to zrobic najlepiej w Nemerle ?
Moze powinienem uzyc rozszerzenia skladniowego np. 
deriveOrderable ( class List { ... } )
ktore zaimplementuje mi wszystkie interface'y i wszystko co trzeba ?

- lk




More information about the devel-pl mailing list