Disons que j'ai une liste de variables, que chaque variable peut être de plusieurs types, que seul le type 'Type1' m'interesse, et que le type 'Type1' contient un champ nommé 'val_int' qui est un entier.

Je veux construire une chaîne de caractères contenant tous les entiers 'val_int' des 'Type1' de la liste.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
type 'a ref = { mutable contents: 'a }
 
  method create_string list =
    let string = { contents = "" } in
    List.iter (fun var ->
      match var with 
      | Type1(var_info) ->
          string.contents <- string.contents
                          ^ (fprintf_to_string "%i " var_info.val_int)
      | _ -> ()) list;
    string.contents
Voici le code que j'ai pondu, il marche.

Seulement dans ma précédente question, on m'a fait savoir qu'éviter d'utiliser des mutables, si possible, c'était mieux.

Je voudrais donc savoir:
- Est-ce que c'est un cas où il faut utiliser un mutable ? Si ce n'est pas le cas, comment faire pour s'en passer ?
- Indépendamment du mutable, est-ce bien comme ca qu'il faut écrire ce genre de code ? Honnêtement, j'ai commencé par faire une boucle for ^^;; Quid de la vitesse, peut-on écrire ca de manière plus optimisée ?