9
votes

SmallTalk - Comparez deux cordes pour l'égalité

J'essaie de comparer deux cordes en smalltalk, mais je semble faire quelque chose de mal.

Je continue à obtenir cette erreur:

Exception non gérée: Récepteur non booléen. Procédez à la vérité. xxx

aucune idée de ce que je fais mal?


0 commentaires

6 Réponses :


17
votes

ESSAYEZ

if a < b then
  puts "a is less than b"
else
  puts "a is greater than or equal to b"
end


3 commentaires

Merci mon compagnon Android. C'était le problème.


Woof - Je ne suis pas si familier w smalltalk mais je me souviens de ce que les crochets sont pour évaluation et que si vous évaluez = opérateur, vous n'allez pas obtenir un booléen :)


Soupigh - Je voulais ajouter de l'exemple d'ACode ici, mais c'était mal formé. Oublie, j'ai ajouté une réponse ...



0
votes

Si vous bloquez la comparaison? J'aurais pensé que: XXX

serait suffisant.


1 commentaires

Les parens sont à la fois inutiles et atypiques. En fait, je trouve que si j'écris des expressions qui nécessitent des parens (en particulier des parens imbriqués), je fais probablement des choses trop compliquées et que je le refactorise à une méthode Named Temp ou de méthode distincte.



1
votes

[stringone = stringtwo] est un bloc, pas un booléen. Lorsque le bloc est invoqué, il entraînera peut-être un booléen. Mais vous n'invokez pas le bloc ici. Au lieu de cela, vous faites simplement que le bloc soit le récepteur de iftrue .

à la place, essayez: xxx


0 commentaires

5
votes

Comme d'autres l'ont dit, cela fonctionnera comme si vous voulez vous débarrasser de la première série de crochets.

Mais pour expliquer le problème, vous couriez mieux: P>

stringOne = stringTwo ifTrue:[myNumber := 20]


0 commentaires

0
votes

Mais je semble faire quelque chose de mal

Étant donné que vous utilisez Visualworks, votre installation devrait inclure un dossier DOC .

Regardez sur le AppDevGuide.pdf - Il dispose de nombreuses informations sur la programmation avec Visualworks et plus au point de proposer de nombreuses informations d'introduction sur la programmation SmallTalk.

Regardez à travers la table du contenu au début, jusqu'à ce que Chapitre 7 "Structures de contrôle" , cliquez sur "Branchement" ou "Tests conditionnels" et vous serez conduit à la section appropriée du PDF que Vous raconte tout à propos de SmallTalk Si, alors-ele et donne des exemples qui vous auraient aidé à voir ce que vous faisiez mal.


0 commentaires

0
votes

Je voudrais ajouter le 50cent suivant:

Comme les blocs sont en réalité lambdas, qui peuvent être transmis, un autre bon exemple serait la méthode suivante: xxx

Donc, l'argument à Iftrue: / iffalse: peut réellement venir de quelqu'un d'autre. Ce type de conditions passées est souvent utile dans "..ifabsent:" ou "..onError:" type de méthodes.

(signifiait à l'origine comme un commentaire, mais je n'ai pas pu obtenir l'exemple de code être non formaté)


0 commentaires