AppleScript:在 "Expected end of line, etc. but found identifier." 中出现 "use framework" 个错误
AppleScript: "use framework" errors out in "Expected end of line, etc. but found identifier."
我有以下一段 AppleScript。
use framework "Foundation"
display dialog "foo"
注意:Foundation框架在这个例子中并没有实际使用,因为那部分代码与这个例子无关。仅此代码就已经产生了错误。在现实生活中,我们显然只导入一个框架来使用它,duh :-)
当我 运行 这个时,我得到了无用的错误:
Expected end of line, etc. but found identifier.
macOS 脚本编辑器停止的标识符是 "dialog"。
当我将代码更改为:
display dialog "foo"
脚本 运行如我所料。
我有两个问题:
- 为什么上面的例子会产生错误?
- 为什么会产生这个确切的错误?或者换句话说:为什么这个错误如此无益?一般来说,AppleScript 是这样吗?
!我的回答所依据的信息已过时,请在我的回答下方查看更新。
脚本出错的原因是因为:
所以基本上:您不允许在常规 AppleScript 脚本中使用 use
语句。您只能在脚本库中使用它。
为了解决这个问题,我们创建了一个 "script library",它只是另一个 AppleScript 文件。假设我们称这个脚本库为 chewbacca.scpt
。您需要将脚本放在 Mac 上的特定位置。 (您有此位置的 few options)。 AppleScript 仅在尝试导入脚本库时查看这些位置。
然后,要使用脚本库,请执行以下操作:
tell script "chewbacca"
display dialog "foo"
end tell
这应该会得到想要的结果。
更新:
阅读一些答案并阅读更多文档后:
AppleScript 的扩展方式是导入一个库,这些库被称为 osax(或 "Scripting Additions"),因为它们的文件名以 .osax
结尾。 OSAX 代表 "Open Scripting Architecture eXtension"。要导入 osax,我们在脚本中写入 use library
(对此我不是 100% 确定)。通过导入 osax,我们可以使用该 osax 中的命令。
AppleScript(语言)没有用于以下内容的命令:用户交互对话框(display dialog
)、读写文件、文件系统命令、日期函数以及文本和数学运算。
但是:Apple 确实提供了一个提供这些命令的 osax:StandardAdditions.osax
,不难看出为什么这是最常用的 osax 之一。
要导入此 osax:
use scripting additions
现在回到我的问题:
我发现 AppleScript 在某些情况下表现不同:
- 脚本不导入 osax
- 脚本导入 osax(但不是
StandardAdditions.osax
)
在情况 1 中,似乎 AppleScript(运行时?)默默地自动导入 StandardAdditions.osax
。我认为是这种情况,因为我可以使用 display dialog
.
情况 2 AppleScript(运行时)不会自动导入 StandardAdditions.osax
。
我可以对这种不同的行为进行推理:
我怀疑对于第一种情况,他们想让人们更容易开始使用 AppleScript,因此他们会自动导入大多数 people/beginners 可能想要使用的基本命令。
情况 2 背后的想法可能是这样的:
“开发人员明确导入了 osax,因此他们可能没有
需要 StandardAdditions.osax
所以我们不要自动导入它。
我在某个地方发现,始终通过将 use scripting additions
添加到脚本来显式导入 StandardAdditions.osax
是个好主意。
我以后会听从这个建议的。
您回答中的预测已过时。您现在可以在标准脚本中导入框架(AFAIR 自 Yosemite)。
如果您应用 use framework
语句,则必须添加
use scripting additions
能够访问display dialog
我有以下一段 AppleScript。
use framework "Foundation"
display dialog "foo"
注意:Foundation框架在这个例子中并没有实际使用,因为那部分代码与这个例子无关。仅此代码就已经产生了错误。在现实生活中,我们显然只导入一个框架来使用它,duh :-)
当我 运行 这个时,我得到了无用的错误:
Expected end of line, etc. but found identifier.
macOS 脚本编辑器停止的标识符是 "dialog"。
当我将代码更改为:
display dialog "foo"
脚本 运行如我所料。
我有两个问题:
- 为什么上面的例子会产生错误?
- 为什么会产生这个确切的错误?或者换句话说:为什么这个错误如此无益?一般来说,AppleScript 是这样吗?
!我的回答所依据的信息已过时,请在我的回答下方查看更新。
脚本出错的原因是因为:
所以基本上:您不允许在常规 AppleScript 脚本中使用 use
语句。您只能在脚本库中使用它。
为了解决这个问题,我们创建了一个 "script library",它只是另一个 AppleScript 文件。假设我们称这个脚本库为 chewbacca.scpt
。您需要将脚本放在 Mac 上的特定位置。 (您有此位置的 few options)。 AppleScript 仅在尝试导入脚本库时查看这些位置。
然后,要使用脚本库,请执行以下操作:
tell script "chewbacca"
display dialog "foo"
end tell
这应该会得到想要的结果。
更新:
阅读一些答案并阅读更多文档后:
AppleScript 的扩展方式是导入一个库,这些库被称为 osax(或 "Scripting Additions"),因为它们的文件名以 .osax
结尾。 OSAX 代表 "Open Scripting Architecture eXtension"。要导入 osax,我们在脚本中写入 use library
(对此我不是 100% 确定)。通过导入 osax,我们可以使用该 osax 中的命令。
AppleScript(语言)没有用于以下内容的命令:用户交互对话框(display dialog
)、读写文件、文件系统命令、日期函数以及文本和数学运算。
但是:Apple 确实提供了一个提供这些命令的 osax:StandardAdditions.osax
,不难看出为什么这是最常用的 osax 之一。
要导入此 osax:
use scripting additions
现在回到我的问题:
我发现 AppleScript 在某些情况下表现不同:
- 脚本不导入 osax
- 脚本导入 osax(但不是
StandardAdditions.osax
)
在情况 1 中,似乎 AppleScript(运行时?)默默地自动导入 StandardAdditions.osax
。我认为是这种情况,因为我可以使用 display dialog
.
情况 2 AppleScript(运行时)不会自动导入 StandardAdditions.osax
。
我可以对这种不同的行为进行推理:
我怀疑对于第一种情况,他们想让人们更容易开始使用 AppleScript,因此他们会自动导入大多数 people/beginners 可能想要使用的基本命令。
情况 2 背后的想法可能是这样的:
“开发人员明确导入了 osax,因此他们可能没有
需要 StandardAdditions.osax
所以我们不要自动导入它。
我在某个地方发现,始终通过将 use scripting additions
添加到脚本来显式导入 StandardAdditions.osax
是个好主意。
我以后会听从这个建议的。
您回答中的预测已过时。您现在可以在标准脚本中导入框架(AFAIR 自 Yosemite)。
如果您应用 use framework
语句,则必须添加
use scripting additions
能够访问display dialog