en python, on peut utiliser PrintF comme formatage avec l'opérateur "%": ou p> est là? Pour obtenir la même syntaxe concise dans OCAML, pour un nombre arbitraire d'arguments? p> Pour un seul argument, les travaux suivants: P> let (%) = Printf.sprintf in ... "i am %d years old" % 99
4 Réponses :
En théorie, il ne semble pas plus difficile d'utiliser un format pour produire le type Dans la pratique, cependant, les implémentations OCAML ont choisi cette dernière forme et mis en œuvre des hacks de type système pour cette forme, pas pour l'ancien. Je crains donc que la réponse soit à peu près du compilateur, vous êtes coincé avec le Curçu A > forme de substitution de chaîne de format. p> (typ1 * typ2 * ... * tynn) -> chaîne code> que
typ1 -> typ2 -> ... -> tynn -> chaîne code>. C'est peut-être, à l'exception des formats récursifs
% (% FMT) CODE>. Est-ce que quelqu'un utilise réellement ceux? P>
Cela dépend de ce que vous entendez par nombre arbitraire d'arguments:
Je ne crois pas qu'il existe un moyen d'écrire une fonction dans OCAML qui peut accepter et décompresser em> un tuple d'arbitraire arbitraire (par exemple, les deux Le moyen de manipuler de multiples arguments est pas em> à travers des tuples, mais par Currying. Si vous êtes prêt à faire cela, vous pouvez simplement utiliser Si vous voulez vraiment un opérateur d'infixe, par exemple, quelque chose comme p>
(1, "Bob ") code> et
(" joe "," bob "," briggs ") code>). p> li>
printf.sprintf code>. P> li>
("%s-%s %s is the best movie reviewer" % "joe") "bob" "briggs"
Vous pouvez le faire par préfixe op, au lieu d'infixer: si vous voulez juste une manière concise d'écriture Sprintf, il suffit de " p> comme Tobu a mentionné que vous avez besoin de P4 si vous voulez python comme la syntaxe spéciale. Je crois que ce doit être trop compliqué. P> p>