Applescript: Der Vergleich der Variablen mit der Zeichenfolge schlägt fehl

11

Ich habe ein Applescript, das eine Liste von Elementen erhält und diese dann durchläuft:

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

Die namesVariable wird ordnungsgemäß auf ein Array von Zeichenfolgen gesetzt. Wenn ich die Liste wiederhole, kann ich jede der currentNameVariablen ohne Probleme separat zurückgeben.

Das Problem, auf das ich stoße, ist die if-Anweisung. Ich erhalte nie das Dialogfeld, in dem "angezeigt" angezeigt wird.

Ich habe den Vergleich ebenfalls ausprobiert if (currentName = "Top_CPU_Processes") thenund er wird immer noch nie als wahr bewertet.

Muss ich etwas tun, damit der Inhalt der Variablen anhand der Zeichenfolge ausgewertet wird?

Chris Schmitz
quelle

Antworten:

10

Wenn Sie eine Liste / ein Array von Variablen haben und diese wiederholen (wiederholen), erhalten Sie Verweise auf jedes Element - z. B. "Element 1 der Namen". Mit anderen Worten, Sie erhalten den Wert nicht direkt, sondern einen Zeiger auf das Element im Array. Sie müssen den Artikelverweis auf seinen tatsächlichen Wert zwingen, um ihn zu vergleichen.

Versuchen Sie: if ((currentName as string) ist gleich "Top_CPU_Processes) then

Wenn Sie den Skript-Debugger verwenden, ist es viel einfacher zu erkennen, was mit dem Skript geschieht. Es verfügt über eine viel bessere Debug-Funktion als der Applescript-Editor.

Chris Paveglio
quelle
Super, danke, dass du darauf hingewiesen hast. Auch ein guter Punkt bezüglich: Verwenden des Rückgabefelds im Vergleich zum Anzeigedialog. Ich habe das meistens gemacht, weil ich dachte, ich drucke falsch mit dem Ergebnisfenster, return "found it"weil es nie gedruckt wurde. Ich werde zurückkehren zu return.
Chris Schmitz
Anstatt die Referenz zu erzwingen, können Sie sie auch einfach dereferenzieren (nach ihrer contentsEigenschaft fragen ): contents of currentName is equal to …Siehe ASLG auf referenceoder a reference to.
Chris Johnsen
Mit Hilfe der as stringBediener das Problem behoben I aufwies , wurde
redolent