Gibt es eine intelligente Methode, um die Funktionseingabe in Clojure zu validieren?

7

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%     
SMC 26.01.2013, 23:35
quelle

2 Antworten

7

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.

    
amalloy 27.01.2013, 00:35
quelle
22

Sicher gibt es - Sie können dafür eine :pre assertion verwenden.

%Vor%

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 .

    
Bozhidar Batsov 27.01.2013 06:59
quelle

Tags und Links