string
et char
étant distincts, on ne peut pas les mélanger. Par exemple :
print_char "a";
File "test.ml", line 1, characters 11-14: This expression has type string but is here used with type char
Erreur sur le "a"
qui est une chaîne, mais qui devrait être un caractère, vu qu'on a utilisé print_char
.
On peut aussi avoir le cas inverse :
print_string 'a';
File "test.ml", line 1, characters 13-16: This expression has type char but is here used with type string
L'oubli d'un backslash est fréquent. Essayons d'abord un tel oubli devant un guillemet :
print_string "Je m'appelle "arthur" et toi ?";
File "test.ml", line 1, characters 0-12: This function is applied to too many arguments, maybe you forgot a `;'
Après print_string "Je m'appelle "
, le compilateur pense que le texte est terminé, puisque le guillemet délimite le texte. Il s'attend donc a trouver un point-virgule pour finir l'instruction, mais il y a quelque chose après, ce qui le trouble.
On peut aussi oublier un backslash devant un symbole backslash. Supposons que l'on veuille afficher un petit dessin \-/
par exemple :
print_string "\-/";
File "test.ml", line 1, characters 14-16: Warning: Illegal backslash escape in string
Il y a un problème sur le \-
que le compilateur considère comme un code spécial, un peu comme il y a \n
ou \t
. Mais \-
ne correspondant à rien du tout, un avertissement est donné. Le code fonctionne tout de même, mais on ne veut pas laisser de Warning
, et donc on écrit la version correcte qui est :
print_string "\\-/";