Ich schreibe eine einfache DiceRoller-Anwendung, und ich habe die primäre Funktion erstellt, aber ich frage mich, ob es eine "intelligente" Möglichkeit gibt, Funktionseingaben in Clojure zu validieren, anstatt verzweigende Bedingungen zu verwenden, um Eingaben zu validieren? Meine Funktion ist unten bei einem Stichprobentest, ich müsste auch testen ob n nicht eine Ziffer mit einer anderen ist oder ob und es sich unordentlich anfühlt.
Auch wenn jemand einen klügeren Weg weisen kann, diese Funktion auszuführen, würde ich mich über jede Rückmeldung freuen. Dies ist mein erster Versuch, funktionell zu programmieren
%Vor% Meistens ist die Clojure-Einstellung "nehmen Sie einfach an, Sie haben das Richtige". In diesem Fall würde der Benutzer, wenn Sie den Scheck vollständig herausnehmen, im Grunde die gleiche Ausnahme erhalten. Aber wenn du das wirklich willst, solltest du es richtig machen! Momentan gibt Ihr Code bei jeder Eingabe eine Ausnahme aus, weil Sie in der Nähe von (number? number)
fehlen.
Sicher gibt es - Sie können dafür eine :pre
assertion verwenden.
Sie erhalten nun AssertionError Assert failed: (Nummer? x) , wenn Sie der Funktion ein nicht numerisches Argument x
übergeben.
Zu prüfen, ob die Eingabe eine Zahl ist, ist irgendwie nutzlos, wie @amalloy bereits darauf hingewiesen hat, aber es gibt eine Menge völlig gültiger Vorbedingungen (und Nachbedingung für diese Angelegenheit), die Sie vielleicht auf Ihre Funktion anwenden möchten. Sie können weitere Details zum Thema hier und hier .
Tags und Links clojure validation