|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
Salut,
J'ai signalé dans un post précédent que je chercherais à paramétrer un module (environment) par un autre module (structure interne quelconque ayant une interface à la Hashtbl) je suis parti sur la création d'une classe avec des méthodes statiques que je devrais surcharger. Code :
mais pour le moment, impossible de caster ^^ Code :
Error 1 Type constraint mismatch. The type obj is not compatibile with type environment. ça me semble être une bonne approche pour garder l'aspect "module" qu'en dites-vous ? |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
En fait c'est juste un type polymorphe.
Tu peux créer autant de fonctions make/create que tu veux qui implémenteront chacune un ('a,'b) hash_table. Code :
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||
|
00
|
|
|
#3 | ||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
mais ensuite comment être sûr de pouvoir utiliser un seul module d'abstraction pour accéder à tout ?
parce que dans ce style, j'avais pensé à cela... mais ça ne me plaît pas trop Code :
|
||
|
|
00
|
|
|
#4 | ||||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Je ne saisi pas bien ton inquiétude.
En OCaml tu écrirais: Code :
Code :
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||||
|
00
|
|
|
#5 | ||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
avec le second code, et ce module environment, j'arrive à avoir quelque chose de correct tout est abstrait par IHashtab<string,valeur>
Code :
en revanche, F# ne me laisse pas paramétrer mon module Environment par 'valeur afin de pouvoir utiliser une class environment<'valeur> |
||
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
bizarre, ça ne remplit pas ma hashtab
|
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
J'ai du mal à comprendre ce que tu veux exactement, au final.
Essaie avec unbox. Mais cette approche n'est pas bonne (elle est dangereuse). Sinon, pour ajouter des méthodes à un type, tu as les extensions de méthodes. Tu peux passer par une classe abstraite : Code :
|
||
|
|
00
|
|
|
#8 | |||||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
je joue... je veux surtout voir ce qu'il diffère (modules paramétrés en OCaml, mais pas en F#) pour le moment, je ne suis pas sur quelque chose de trop sérieux... tant que tu ne me voies pas parler de quelque chose en rapport avec le forme SSA, je suis sur un modèle de test Citation:
je vais tenter... mais ça risque de m'obliger à définir plus de méthodes que je n'en ai réellement besoin sinon comprends-tu pourquoi rien ne semble remplir ma hashtab avec l'interface IHashtab et la classe environment ![]() Code :
en gros, ça passe sans TRY_PARAMETRIC_ENV, mais pas avec Code :
|
|||||
|
|
00
|
|
|
#9 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
Citation:
donc KeyNotFoundException est levée... il faut alors préciser que Not_found est justement un alias pour cette exception Code :
exception Not_found = System.Collections.Generic.KeyNotFoundException le hic est que cela marchait bien avec le module Hashtbl de la librairie de base, ont-ils fait cette "magouille" aussi ? |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Utilise la fonction "not_found()", plutôt que de redéfinir ton exception. Les exceptions sont parfois mappées aux types .Net, justement pour améliorer l'interopérabilité.
Évite d'utiliser des exceptions pour les cas "normaux". Ici, tryfind + pattern matching est largement préférable. Mais a priori, c'est la solution de la classe abstraite qui correspond le mieux à tes besoins. |
|
|
00
|
|
|
#11 | |||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
Citation:
mais je ne lève pas d'exception ici... je voulais juste la récupérer je vais regarder de plus près Citation:
EDIT : arf, bien sûr IHashtab<'key,'value>.tryfind : 'key -> option<'value> fait ![]() Citation:
|
|||
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Si tu utilises l'exception Not_found, tu devrais avoir un warning (compatibilité Caml). Sauf si tu l'as redéfini... |
|
|
|
00
|
|
|
#13 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 962 ![]() |
Citation:
sinon j'ai fait un nowarn 62
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com