Ошибка синтаксиса AppleScript - PullRequest
1 голос
/ 18 ноября 2010

Я пытаюсь вывести список элементов todo из приложения Mac для вещей, используя AppleScript.

Но я получаю синтаксическую ошибку: ожидаемое выражение, но найдено «to».

Поскольку Things используетимя to to, и AppleScript это не нравится, поскольку to является зарезервированным ключевым словом.Это работает без проблем, если код повторения находится непосредственно внутри оператора tell, а не в обработчике функции.

Есть ли способ обойти это?

set output to ""

on getTodos(listName)
    repeat with todo in to dos of list listName
        set todoName to the name of todo
                set output to output & todoName
    end repeat
end getTodos

tell application "Things"
   getTodos("Inbox")
   getTodos("Today")
end tell

Возможно ли это вообще?сделать это так?И есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

Конечно, это легко выполнимо.Проблема в том, что вне блока tell application "Things" ... end tell AppleScript не знает, какие вещи будут в нем особенными, и даже не смотрит на оба.Все, что вам нужно сделать, это переместить блок tell в on getTodos(listName) ... end getTodos:

on getTodos(listName)
  tell application "Things"
    repeat with todo in to dos of list "Inbox"
      set todoName to the name of todo
      set output to output & todoName
    end repeat
  end tell
end getTodos

Вы также можете заменить tell на using terms from;Я думаю, что это должно работать.Кроме того, вы никогда не используете listName - вы хотели заменить "Inbox" на listName?

Однако вы должны иметь возможность заменить getTodos на одну строку

on getTodos(listName)
  tell application "Things" to get the name of the to dos of list listName
end getTodos

Этот вид ярлыков - одна из тех вещей, в которых хорошо работает AppleScript.Также обратите внимание, что эта новая версия не изменяет output, а просто возвращает список;В любом случае, я бы сказал, что это лучшее решение, но вы всегда можете сделать set output to output & ....

0 голосов
/ 18 ноября 2010

Я считаю, что проблема в том, что AppleScript не знает, что вы пытаетесь использовать терминологию, относящуюся к вещам, в вашем обработчике. Попробуйте поместить repeat в блок using terms from application Things, например:

on getTodos(listName)
    using terms from application "Things"
        repeat with todo in to dos of list "Inbox"
            set todoName to the name of todo
                    set output to output & todoName
        end repeat
    end using terms from
end getTodos
...