Applescript: A comparação da variável com a string está falhando

11

Eu tenho um AppleScript que obtém uma lista de itens e itera sobre eles:

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

A namesvariável é definida como uma matriz de seqüências de caracteres corretamente. Quando repito a lista, sou capaz de obter cada uma das currentNamevariáveis ​​retornadas separadamente sem problemas.

O problema que estou enfrentando é a instrução if. Eu nunca estou recebendo a caixa de diálogo que a "encontrou".

Eu tentei a comparação if (currentName = "Top_CPU_Processes") thentambém e ela ainda não é avaliada como verdadeira.

Existe algo que eu preciso fazer para avaliar o conteúdo da variável em relação à string?

Chris Schmitz
fonte

Respostas:

10

Quando você tem uma lista / matriz de variáveis ​​e itera (repete) sobre elas, está obtendo referências para cada item - como "item 1 de nomes". Em outras palavras, você não obtém o valor diretamente, obtém um ponteiro para o item na matriz. Você deve coagir a referência do item ao seu valor real para compará-lo.

Tente: se ((currentName como string) for igual a "Top_CPU_Processes), então

Além disso, se você estiver usando o Script Debugger, é muito mais fácil ver o que acontece com o script, ele tem uma capacidade de depuração muito melhor do que o Editor de Applescript.

Chris Paveglio
fonte
Incrível, obrigado por apontar isso. Além disso, vale a pena re: usar o painel de retorno versus a caixa de diálogo do visor. Eu estava principalmente fazendo isso porque achava que estava imprimindo incorretamente no painel de resultados return "found it"porque ele nunca foi impresso. Eu voltarei para return.
22414 Chris
Além disso, em vez de coagir a referência, você pode simplesmente desdiferenciá-la (pedir sua contentspropriedade): contents of currentName is equal to …consulte ASLG em referenceou a reference to.
Chris Johnsen
O uso do as stringoperador corrigiu o problema que eu estava tendo
redolent