50Close52
ZephOn the 2015-03-28 at 10:26pm
Oh y'a pas que ça, je suis tombé sur des comportements amusants : imaginons que tu as une fonction "toto(a: A, b: B)(implicit c: C, d: D)". Puis à un moment tu as envie de spécifier explicitement tous les paramètres, donc tu l'appelles comme ça :toto(appel_qui_renvoie_un_A(), appel_qui_renvoie_un_B())(appel_qui_renvoie_un_C(), appel_qui_renvoie_un_D())
Bon, ça fait quand même une ligne un peu longue, donc tu es tenté de la couper en deux :toto(appel_qui_renvoie_un_A(), appel_qui_renvoie_un_B()) (appel_qui_renvoie_un_C(), appel_qui_renvoie_un_D())
Manque de bol, il y avait deux objets de type "C" et "D" qui trainaient dans le scope actuel, tu as donc perdu : sans t'en rendre compte, ton appel (qui était tout à fait valide) vient de se transformer en deux statements distincts, le premier étant l'appel d'une fonction qui prend tes deux paramètres explicites + les deux paramètres implicites trouvés dans le scope, le second étant un tuple de deux objets "C" et "D" qui n'a aucun effet mais reste valide. Ça compile, aucune erreur n'est détectée, par contre à l'exécution ça risque de ne pas faire exactement ce qui était prévu.

Ça parait un peu tiré par les cheveux, mais on a déjà eu ce cas de figure qui est arrivé dans du vrai code tritop