导致堆栈溢出的简单AppleScript—;为什么?
--我肯定这是一个复制品-- 我在O'reilly的书中读到了这一点(: 不过,没有任何理由: 在简单的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,以及一个处理程序“
script implicitRunHandlerScript
end script
run implicitRunHandlerScript
-- why does this lead to a stack overflow?
您发布的脚本包含一个子脚本,名为
implicitRunHandlerScript
,以及一个处理程序“implicitrun
handler”。隐式run
处理程序包含一条语句:
run implicitRunHandlerScript
子脚本继承其父脚本的处理程序。因此,您的implicitRunHandlerScript
继承其父级的implementrun
处理程序。继承的隐式run
处理程序调用implicitRunHandlerScript
的run
处理程序,因此它递归地调用自己
阅读AppleScript语言指南中的和。From
如果脚本对象没有显式运行处理程序且没有可执行文件
在其隐式运行处理程序中,告诉它运行的语句可以
不可预测的后果(这几乎肯定是一个bug)
为什么向隐式UnhandlerScript添加beep命令(或任何命令)会修复您描述的递归?将
beep
语句放入子脚本中(在script implicitRunHandlerScript
和end script
之间修复递归,因为子脚本有自己的隐式run
处理程序,而不是继承父脚本的处理程序。因此,脚本对象在包含可执行语句之前没有隐式run处理程序?脚本本身呢(哪一个是脚本对象)?我不理解你的问题。我没有读到任何关于脚本对象何时“获得”隐式运行处理程序的内容。这也会产生堆栈溢出。可执行语句是否“创建”隐式运行处理程序?+1指出了这一点。