[nem-pl] nawiasy

Michal Moskal malekith at pld-linux.org
Fri Feb 13 19:02:52 CET 2004


On Thu, Feb 12, 2004 at 09:41:33PM +0100, Kamil Skalski wrote:
> C# 2.0:
> static void Test<T>() where T: new(), ICounter {

> u nas będzie:
> static <T> where T : object, ICounter Test() : void  {


Nie wiem czy tak jak jest w C# nie byłoby lepiej, tzn:

	static Test<T> () : void 
	  where T: new(), ICounter 
	{
	  ...
	}

W C# jest tak, ponieważ można napisać:

	Test<int> ();

Co zasadniczo ma pewien sens -- paramtry typowe są naprawdę
przekazywane, więc taka funkcja może coś naprawdę w zależności od typu
robić. Wychodzi to co prawda podobnie jak:

	Test (t : System.Type) : void { ... }
	Test (typeof (int));

Ale skoro jest możliwe to powinniśmy to mieć.

U nas normalnie robi się constrainty na parametrach żeby wymusić typ:

	'a foo (x : 'a) : list ('a) { ... }
	foo ((null : FooBar))

Co zasadniczo jest bardziej czytelne, ale też w większości przypadków
dłuższe, bo 'a nie występują same tylko opakowane w konstruktory:

	List.Iter ((f : Foo -> void), foo)
	List.Iter<Foo> (f, foo)

(taki cast jest potrzebny, gdy f przyjumuje bardziej ogólny typ niż 'a z
foo:list('a), na to pewnie coś jeszcze poradzimy, ale mogą się podobne
sytuacje pokazać).

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




More information about the devel-pl mailing list