- 我確定這是一個重複 -導致stackoverflow的簡單AppleScript - 爲什麼?
我在O'Reilly出版閱讀(:
有沒有道理雖然):
在一個簡單的AppleScript文件:
script implicitRunHandlerScript
end script
run implicitRunHandlerScript
-- why does this lead to a stack overflow?
- 我確定這是一個重複 -導致stackoverflow的簡單AppleScript - 爲什麼?
我在O'Reilly出版閱讀(:
有沒有道理雖然):
在一個簡單的AppleScript文件:
script implicitRunHandlerScript
end script
run implicitRunHandlerScript
-- why does this lead to a stack overflow?
您發佈的腳本包含一個名爲implicitRunHandlerScript
的子腳本和一個處理程序「隱含的run
處理程序」。隱式run
處理程序包含一個聲明:
run implicitRunHandlerScript
一個孩子的腳本繼承其父的處理程序。所以你的implicitRunHandlerScript
繼承其父的處理器run
。並且繼承的隱式run
處理程序調用implicitRunHandlerScript
的run
處理程序,因此它會遞歸調用它自己。
閱讀Defining Script Objects和Inheritance in Script Objects在AppleScript語言指南。
從AppleScript: The Definitive Guide:
如果腳本對象沒有明確的運行處理程序,並沒有可執行在其隱含的運行處理 聲明,告訴它運行可以有 不可預測的後果(這一點幾乎可以肯定是一個錯誤)。
爲什麼要向implicitRunHandlerScript添加蜂鳴聲命令(或任何命令)修復您描述的遞歸? – adayzdone
在子腳本中放置一個'beep'語句(腳本implicitRunHandlerScript'和'end script'修復了遞歸,因爲這樣子腳本就有了它自己的隱式'run'處理程序,而不是繼承父母的 –
所以腳本對象在它包含可執行語句之前沒有隱式運行處理程序?那麼腳本本身(它是一個腳本對象)怎麼樣? – adayzdone