Google apps script 项目/库物理(编辑访问)和逻辑(执行访问)范围

Google apps script 项目/库物理(编辑访问)和逻辑(执行访问)范围,google-apps-script,Google Apps Script,我已经阅读了一些基本的谷歌应用程序脚本文档/教程。我还没有找到任何关于代码执行“范围”的解释 以下是我到目前为止的理解: All code consists of one or more statements All statements must (?) be contained in a "function" (a slight different from non-google javascript? - is this a false assumption?) All

我已经阅读了一些基本的谷歌应用程序脚本文档/教程。我还没有找到任何关于代码执行“范围”的解释

以下是我到目前为止的理解:

 All code consists of one or more statements
 All statements must (?) be contained in a "function"
     (a slight different from non-google javascript? - is this a false assumption?) 
 All functions reside in a container called a "file"
 Each "file" is part of a "project" container (or library)
 Each project container is stored in a "spreadsheet" container.
这些是“物理”(编辑访问)边界

我的问题是语句的“逻辑”边界是什么
在执行期间

我首先假设所有变量/对象都是全局的, 类似于JavaScript在网页中的操作方式。我不这么认为 “编辑访问”容器限制了变量/对象定义的范围。 我错了

我认为“库”结构类似于PHP的“包含”操作。 这样一来,我想我就不用再复制同一套文件了 在我需要的每个应用程序(电子表格容器)中编写代码 使用已经“测试”过的代码。我假设有足够的资源 包含的项目与包含的项目相同 项目共同资源)。总之,我错了。“属性”存储在定义电子表格中,并被视为包含项目的“所有”

通过玩它,我现在明白了“项目密钥”只是增加了 电子表格容器的新“命名空间”。每种情况下会发生什么 名称空间保留在该名称空间中。唯一(最简单)的沟通 名称空间之间通过函数参数和返回值进行连接

特别是,用户和项目属性的作用域为并保留在 它们包含电子表格文档。电子表格中的每个项目 文档有一组单独的用户和项目属性

相同的项目/库名称可以出现在多个电子表格文件中 而且是完全独立的

这有文件记录吗?还有其他事情我需要知道吗 关于作用域(来自不同应用程序的线程之间的通信) 是否共享同一项目/库

此外,如果函数将引用传递回 库范围,它是否会保留在调用的项目中?我可以通过/返回吗 指向项目的UserProperties“sevice”对象并具有访问权限的变量
在另一个项目中添加该数据?

这一点在库中的用户指南结尾处有记录:

在决定如何确定范围时,我们试图认真考虑最常见的用例,并尽可能减少意外,但我们并不完美

关于您是否可以使用参数传递在库和项目之间共享ScriptProperties对象的问题,目前这是不可能的。您可以始终公开特定属性的getter/setter


如果您有一个有趣的用例,如果没有请求的行为就无法实现,请在我们的问题跟踪器中提交一个bug。谢谢!

我也在努力解决这个问题。虽然文档非常好,但有点混乱

共享和非共享的概念花了我一点时间才得到

我想提到的是,UserProperties存在于用户级别,并且不仅仅与项目或库相关联。在使用库时,不需要像使用ScriptProperties那样传递UserProperties

周围都是整洁的东西:-)


吉姆

古帕谢谢你的指点。我未能更详细地阅读文档。文档非常好。