Applescript: Порівнювати змінну з рядком не вдається


11

У мене є яблучний скрипт, який отримує список елементів, а потім повторює їх:

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

namesМінлива отримує значення масиву рядків правильно. Коли я повторююсь над списком, я можу отримати кожну зі currentNameзмінних, що повертаються окремо, без проблем.

Проблема, з якою я стикаюся, - це оператор if. Я ніколи не отримую діалогове вікно, на якому дисплей "знайшов його".

Я також спробував порівняння, if (currentName = "Top_CPU_Processes") thenі це все ще ніколи не оцінюється як істинне.

Чи є щось, що мені потрібно зробити, щоб вміст змінної оцінити по рядку?

Відповіді:


10

Коли у вас є список / масив змінних і ви повторюєте (повторюєте) над ними, ви отримуєте посилання на кожен елемент - наприклад, "пункт 1 імен". Іншими словами, значення ви не отримуєте безпосередньо, ви отримуєте вказівник на елемент у масиві. Ви повинні примусити посилання на предмет на його фактичне значення, щоб порівняти його.

Спробуйте: якщо ((currentName як рядок) дорівнює "Топ_CPU_Process))

Крім того, якщо ви використовуєте налагоджувач сценаріїв, набагато простіше зрозуміти, що відбувається із сценарієм, він має набагато кращі можливості налагодження, ніж редактор Applescript.


Дивовижне, дякую, що вказали на це. Крім того, добре: використання панелі повернення та діалогового вікна відображення. Я в основному робив це, тому що думав, що друкував на панелі результатів неправильно, return "found it"оскільки він ніколи не друкувався. Я повернусь до return.
Кріс Шмітц

Крім того, замість примусового посилання ви можете просто знешкодити його (запитати його contentsвластивість): contents of currentName is equal to …Див. ASLG на referenceабо a reference to.
Кріс Джонсен

За допомогою as stringоператора виправлено проблему, яку я мав
повторне
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.