为什么迭代在带有`repeat with ... in`的applescript中的列表失败,错误代码`-1731`在列表中的一部分?


1

我有 这个脚本 确保给定智能播放列表中的每个轨道都是可移动的和可收藏的。

该脚本旨在通过launchd启动。

所有这些设置都很好,除了脚本表现出奇怪的行为。当你运行它时,其中一些成功但是大多数似乎由于错误代码而失败 -1731。后续运行会发生相同的行为,直到您没有更多可拖动和可收藏的曲目。

我希望如果第一次运行时代码错误会继续出错,但事实并非如此。

这里发生了什么事?


我敢打赌,失败不是随机的。
Daniel

Answers:


4

添加显式get以解析对轨道的引用:

tell application "iTunes"
    repeat with t in (get tracks of playlist "Listen Smart" where shufflable is false)
        set shufflable of t to true
    end repeat
    repeat with t in (get tracks of playlist "Listen Smart" where bookmarkable is false)
        set bookmarkable of t to true
    end repeat
end tell

尝试运行这样的脚本:

tell application "iTunes"
    repeat with t in (tracks of playlist "Listen Smart" where shufflable is false)
        t
    end repeat
end tell

如果播放列表有三个曲目,其中shufflable为false,则结果将是类似的结果 item 3 of every track of playlist "Listen Smart" of application "iTunes" whose shufflable = false。如果在重复循环内将前两个轨道的shuffble设置为true,则不会有shufflable为false的项目3。

如果你更换 repeat with t in (tracksrepeat with t in (get tracks,最后的结果将是这样的 item 3 of {file track id 54774 of user playlist id 54771 of source id 73 of application "iTunes", file track id 54775 of user playlist id 54771 of source id 73 of application "iTunes", file track id 54776 of user playlist id 54771 of source id 73 of application "iTunes"}


我想我现在明白了。我相信你所指出的是我正在使用的列表 repeat … in 实际上是在引擎盖下变异,但是我重复的计数器不是这样,当我每次消耗一半列表时,我实际上是错误的,因为现在已经消失了一半。如果那就是你想要的,你能否在答案中更清楚一点?我花了一点时间才看到它,我认为其他人会遇到同样的困难。
Tim Visher

@TimVisher我编辑了答案。该列表没有变异,但它包含像 item 123 of every track of playlist "Listen Smart" of application "iTunes" whose shufflable = false
Lri

0

作为一个 完成 黑客, 这个 似乎可以做到这一点。

请注意,这是非常不满意的,所以我仍然非常有兴趣听到更好的回应。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.