【问题标题】:Applescript Error "can't get end of"Applescript 错误“无法结束”
【发布时间】:2015-02-21 12:53:39
【问题描述】:

我正在尝试使用 Applescript,但看不出有什么问题。 我得到的错误是

错误“无法结束{返回的按钮:\"OK\",返回的文本:\"3\"}。"从 {button 返回的最后一个插入点开始的数字 -1728:“OK”,返回的文本:“3”}

这是我的代码:

beep
set counter to 0
set tempX to 0
set temp to 0
set counting to 0
set stored to {0}
set input to "How many grades do you wish to enter?" as string
set str to display dialog input buttons {"NEXT"} default button "NEXT" default answer ""
repeat text returned of str times
    counting = counting + 1
    set grades to display dialog "GRADES:  " default answer ""
    set stored to grades
end repeat
set rep to the length of stored
repeat rep times
    counter = counter + 1
    set tempX to the ((end of stored) - counter) as number
    set temp to temp + tempX
end repeat
set ln to the length of grades
set average to temp / ln
if text returned of str is 1 then
    say "The Average of your grade is " & average using "Zarvox"
else
    say "The Average of your grades is " & average using "Zarvox"
end if
get "AVERAGE:  " & average

【问题讨论】:

    标签: macos applescript average


    【解决方案1】:

    所以,在我开始之前:我强烈建议您自学如何使用 Javascript 接口来处理 Apple 事件,而不是 Applescript 语言本身。 Applescript 是一种非常奇怪的语言,它的怪癖在很大程度上是独一无二的;学习它会令人沮丧,并且不会帮助您学习其他语言。

    话虽如此,让我们深入了解您的代码:

    set stored to {0}
    

    这将使您从一个始终存在并设置为零的成绩开始。您可能只想将其初始化为一个空列表:

    set stored to {}
    

    下一步:

    set grades to display dialog "GRADES:  " default answer ""
    

    这会将grades 设置为一个结果对象,而不仅仅是答案。您可能想要的实际上是结果的text returned

    set grades to text returned of (display dialog "GRADES:  " default answer "")
    

    (这就是在您的错误消息中创建看起来很奇怪的对象的原因。)


    接下来,你用这个结果对象覆盖stored

    set stored to grades
    

    您可能希望在这里将该元素插入到列表中。因为 Applescript 是一种奇怪且令人讨厌的语言,所以这比您想象的要麻烦一些:

    set stored to stored & {grades}
    

    最后,你的平均有一些逻辑问题;您每次都将end of stored(即最后一个成绩输入)添加到temp 变量中。一个更简单的方法是:

    set temp to 0
    repeat with n in stored
        set temp to temp + n
    end repeat
    set average to sum / (count of stored)
    

    完成这些更改后,您的脚本应该可以正常工作了。

    【讨论】:

    • 非常感谢。我在过去花了 4 个小时对此感到沮丧。不过,我以前从未见过“与 n 重复”。但是,非常感谢。
    • 我只想补充一点,就是任何出现蓝色的词都是关键字,不能作为变量名。你对 ln 的使用,在我的机器上变成蓝色。解决这个问题的方法当然是更改名称,但你也可以这样写|ln| 告诉解释器它是你的变量。我还建议您下载并阅读一些 AppleScript 语言指南。 (免费)
    • @McUsr:这当然是有争议的,对于一个没有安装各种任意 osaxen 和脚本库的干净的 mac ln 可以在不需要管道的情况下正确使用。或者至少告诉哪个商业 osax 导致了问题。现在评论或多或少毫无意义
    • 其实不是,因为有时会出现一些有颜色的词,然后op希望知道如何处理这种情况。
    • ln 被 Satimage osax 使用。在 Smile 脚本编辑器中,您可以键入 ln,编译,然后执行 command-shift-f 以显示定义,在这种情况下,将 ln 作为返回 base-e 对数的命令实数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2013-05-14
    • 2021-08-22
    • 2014-04-20
    相关资源
    最近更新 更多