Applescript: no se puede comparar la variable con la cadena

11

Tengo un applecript que obtiene una lista de elementos y luego los repite:

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 se establece en una matriz de cadenas correctamente. Cuando repito sobre la lista, puedo obtener cada una de las currentNamevariables devueltas por separado sin ningún problema.

El problema con el que me encuentro es la declaración if. Nunca recibo el cuadro de diálogo que muestra "lo encontró".

También probé la comparación if (currentName = "Top_CPU_Processes") theny todavía nunca se evalúa como verdadera.

¿Hay algo que deba hacer para que el contenido de la variable se evalúe contra la cadena?

Chris Schmitz
fuente

Respuestas:

10

Cuando tiene una lista / matriz de variables e itera (repite) sobre ellas, obtiene referencias a cada elemento, como "elemento 1 de nombres". En otras palabras, no obtiene directamente el valor, obtiene un puntero al elemento en la matriz. Debe forzar la referencia del artículo a su valor real para compararlo.

Intente: si ((currentName como cadena) es igual a "Top_CPU_Processes) entonces

Además, si está utilizando Script Debugger, es mucho más fácil ver qué sucede con el script, tiene una capacidad de depuración mucho mejor que el Applescript Editor.

Chris Paveglio
fuente
Impresionante, gracias por señalarlo. Además, un buen punto es: usar el panel de retorno frente al diálogo de visualización. Lo estaba haciendo principalmente porque pensé que estaba imprimiendo en el panel de resultados incorrectamente return "found it"porque nunca se imprimió. Regresaré a return.
Chris Schmitz
Además, en lugar de coaccionar la referencia, puede simplemente desreferenciarla (solicitar su contentspropiedad): contents of currentName is equal to …consulte ASLG en referenceo a reference to.
Chris Johnsen
El uso del as stringoperador solucionó el problema que estaba teniendo
redolente el