indexOf Switch
J'ai un Javascript bot pour un Xat chat qui agit également comme une IA. J'ai récemment décidé de refaire l'IA partie en raison de sa devient absolument massive de la chaîne de else if
états, devenant presque impossible de travailler avec.
J'ai fait quelques recherches et est venu avec une nouvelle idée de la façon de traiter les réponses. Je vais vous donner le segment de code en premier:
function msgSwitch(id,msgRes) {
var botResponse = [];
switch (msgRes) {
case (msgRes.indexOf("hi") !=-1):
botResponse.push("HELLO. ");
case (msgRes.indexOf("how are you") !=-1):
botResponse.push("I AM FINE. ")
case (msgRes.indexOf("do you like pie") !=-1):
botResponse.push("I CAN'T EAT. THANKS, ASSHAT. ")
default:
respond (botResponse);
spamCount(id);
break;
}
}
L'idée ici est de vérifier msgRes
(l'entrée de l'utilisateur) et de voir comment de nombreux cas, il correspond. Ensuite, pour chaque match, il va push
de la réponse dans l' botResponse
tableau, puis à la fin, il va répondre à tous les messages dans ce tableau.
Exemple
Utilisateur Msg: Hi! How are you?
msgRes: hi how are you
Bot Matches:
hi
> pousse HELLO.
à la matrice
how are you
> pousse I AM FINE.
à la matrice
Bot Répond: HELLO. I AM FINE.
Cette tour, me permet d'économiser la peine d'avoir à écrire un if
pour chaque combinaison possible.
Cependant, lorsque l'on regarde un peu plus, je ne suis pas sûr si il est possible d'utiliser indexOf
à l'intérieur d'un interrupteur. Personne ne sait d'une façon de contourner ce problème ou avez une meilleure idée pour le traitement des réponses de la même manière?
EDIT:
Pour Éviter la XY Problème (À préciser mon problème)
J'ai besoin d'une alternative propre à l'aide d'une énorme chaîne de else if
consolidés. Il va y avoir des centaines de segments de parole que le bot va répondre. Sans la possibilité pour elle de garder à la recherche pour les matchs, je dois écrire une nouvelle else if
pour chaque combinaison.
Je suis en espérant une méthode pour analyser chaque déclaration pour un match, puis de les combiner la réponse pour chaque match ensemble dans une seule chaîne.
EDIT 2:
Je dois également ajouter que c'est être couru sur Tampermonkey et pas un site web.
else if
.Vous pourriez vouloir lire de nouveau sur la façon
switch
œuvres.
OriginalL'auteur Leaf | 2014-03-09
Vous devez vous connecter pour publier un commentaire.
Mes deux cents pour l'essentiel de ce que vous essayez de faire:
À mon avis, il est plus facile de changer de programme que vous n'avez qu'à éditer les graines si vous avez plus de réponses dans le futur. Vous pouvez même ranger la graine sur certains fichier json et de le lire (via ajax) de sorte que le programme n'a pas besoin d'être changé si il y a d'autres messages.
id
n'est même pas utilisé dans cette fonction, vous pouvez simplement laisser tomber!OriginalL'auteur ailveen
vous avez juste besoin de le comparer à true au lieu de msgRes (puisque les cas d'utilisation === comparaison), et l'utilisation de pause pour éviter le désagrément de l'automne-si le commutateur de comportement:
C'est parfaitement logique valide bifurquer modèle, connu comme un "interrupteur de surcharge". Beaucoup de gens pourraient ne pas comprendre que chaque
case:
est une expression, pas seulement une valeur, donc vous pouvez même mettre une IIFE là-bas, si nécessaire...OriginalL'auteur dandavis