2017-08-29 4 views
1

J'ai une fonction encode qui prend une graine et un message pour retourner un chiffre.Pourquoi la fonction clojure ne fonctionne pas ou ne plante pas dans core.cljs [réactif]?

Mon problème est que lorsque j'ai essayé de l'utiliser dans mon fichier core.cljs avec reagent, la fonction est en panne silencieusement (renvoyant une chaîne vide). J'ai l'impression que je fais quelque chose de mal (ou d'approche), donc les pointeurs rapides seront très appréciés.

(prn (encode "testing" "test"))   ;;> "" 
(prn (type encode))      ;;> #object[Function] 
(prn (type (encode "testing" "jordan"))) ;;> #object[String] 

Par exemple, je me attendais: "mikmbry" de (encode "testing" "test"). Tout fonctionne sur le repl mais échoue silencieusement sur core.cljs.

Merci pour votre temps.

+1

Pourriez-vous s'il vous plaît partager la mise en œuvre de votre 'encode' fonction? –

+0

Sûr ici c'est: [gist] (https://gist.github.com/mohamedhayibor/45423dfe60c51a8f22a80ab056726541). –

Répondre

4

Votre code rencontre un problème avec la gestion des chaînes dans ClojureScript.

JavaScript n'a pas de type de caractère et ClojureScript ne présente pas son propre type. Au lieu de cela lorsque vous traitez une chaîne comme une séquence, il est des éléments individuels seront longues chaînes d'un seul caractère:

(seq "ABC") 
;; => ("A" "B" "C") 

Si vous avez besoin pour obtenir la valeur numérique ASCII d'un caractère que vous devez utiliser JavaScript de String.charCodeAt(index):

(.charCodeAt "A" 0) 
;; => 65 

Pour convertir un nombre (code ASCII) dans une chaîne, vous pouvez utiliser String.fromCharCode:

(js/String.fromCharCode 65) 
;; => "A"