Applescript: la comparaison de la variable avec la chaîne échoue

11

J'ai un applescript qui obtient une liste d'éléments puis les répète:

tell application "GeekTool Helper"
    set names to name of geeklets

    repeat with currentName in names
        if (currentName is equal to "Top_CPU_Processes") then
            display dialog "found it"
        end if
        return currentName
    end repeat
end tell

La namesvariable est correctement définie sur un tableau de chaînes. Lorsque je répète la liste, je peux obtenir chacune des currentNamevariables retournées séparément sans problème.

Le problème que je rencontre est l'instruction if. Je ne reçois jamais la boîte de dialogue qui affiche "l'a trouvé".

J'ai également essayé la comparaison if (currentName = "Top_CPU_Processes") thenet elle n'est toujours pas aussi vraie.

Y a-t-il quelque chose que je dois faire pour que le contenu de la variable soit évalué par rapport à la chaîne?

Chris Schmitz
la source

Réponses:

10

Lorsque vous avez une liste / un tableau de variables et que vous les parcourez (répétez), vous obtenez des références à chaque élément - comme «l'élément 1 des noms». En d'autres termes, vous n'obtenez pas directement la valeur, vous obtenez un pointeur vers l'élément dans le tableau. Vous devez contraindre la référence de l'article à sa valeur réelle pour la comparer.

Essayez: si ((currentName as string) est égal à "Top_CPU_Processes) alors

De plus, si vous utilisez Script Debugger, il est beaucoup plus facile de voir ce qui se passe avec le script, il a une bien meilleure capacité de débogage que l'éditeur Applescript.

Chris Paveglio
la source
Génial, merci de l'avoir signalé. Aussi, bon point concernant l'utilisation du panneau de retour par rapport à la boîte de dialogue d'affichage. Je faisais cela principalement parce que je pensais que je n'imprimais pas correctement dans le panneau de résultats return "found it"car il n'imprimait jamais. Je reviendrai return.
Chris Schmitz
De plus, au lieu de contraindre la référence, vous pouvez simplement la déréférencer (demander sa contentspropriété): contents of currentName is equal to …Voir ASLG sur referenceou a reference to.
Chris Johnsen
L'utilisation de l' as stringopérateur a résolu le problème que j'avais
redouble