0

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

到目前为止,这是我的理解:

 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“服务”对象的变量并可以访问另一个项目中的数据吗?

4

2 回答 2

2

这记录在库中用户指南的末尾: https ://developers.google.com/apps-script/guide_libraries

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

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

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

于 2012-06-26T23:18:34.643 回答
0

我也为此苦苦挣扎。虽然文档非常好,但有点令人困惑。

共享和不共享的概念让我经历了一些反复试验才得到。

我确实想提一下,UserProperties 存在于用户级别,并且不仅仅与项目或库相关联。使用库时无需像使用 ScriptProperties 那样传递 UserProperties。

到处都是整洁的东西:-)

吉姆

于 2012-12-08T11:49:15.667 回答