[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