导致堆栈溢出的简单AppleScript—;为什么?

导致堆栈溢出的简单AppleScript—;为什么?,applescript,stack-overflow,Applescript,Stack Overflow,--我肯定这是一个复制品-- 我在O'reilly的书中读到了这一点(: 不过,没有任何理由: 在简单的AppleScript文件中: script implicitRunHandlerScript end script run implicitRunHandlerScript -- why does this lead to a stack overflow? 您发布的脚本包含一个子脚本,名为implicitRunHandlerScript,以及一个处理程序“

--我肯定这是一个复制品--

我在O'reilly的书中读到了这一点(:

不过,没有任何理由:

在简单的AppleScript文件中:

script implicitRunHandlerScript
end script      

run implicitRunHandlerScript
      --    why does this lead to a stack overflow?

您发布的脚本包含一个子脚本,名为
implicitRunHandlerScript
,以及一个处理程序“implicit
run
handler”。隐式
run
处理程序包含一条语句:

run implicitRunHandlerScript
子脚本继承其父脚本的处理程序。因此,您的
implicitRunHandlerScript
继承其父级的implement
run
处理程序。继承的隐式
run
处理程序调用
implicitRunHandlerScript
run
处理程序,因此它递归地调用自己

阅读AppleScript语言指南中的和。

From

如果脚本对象没有显式运行处理程序且没有可执行文件 在其隐式运行处理程序中,告诉它运行的语句可以 不可预测的后果(这几乎肯定是一个bug)


为什么向隐式UnhandlerScript添加beep命令(或任何命令)会修复您描述的递归?将
beep
语句放入子脚本中(在
script implicitRunHandlerScript
end script
之间修复递归,因为子脚本有自己的隐式
run
处理程序,而不是继承父脚本的处理程序。因此,脚本对象在包含可执行语句之前没有隐式run处理程序?脚本本身呢(哪一个是脚本对象)?我不理解你的问题。我没有读到任何关于脚本对象何时“获得”隐式运行处理程序的内容。这也会产生堆栈溢出。可执行语句是否“创建”隐式运行处理程序?+1指出了这一点。