AppleScript语法错误

时间:2010-11-18 17:26:12

标签: function applescript syntax-error

我尝试使用AppleScript从Mac app Things输出待办事项列表。

但是我收到语法错误: 预期的表达但发现“到”。

由于Things使用名称“to dos”而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 个答案:

答案 0 :(得分:4)

当然,这很容易实现。问题是在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 & ...

答案 1 :(得分:0)

我认为问题在于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