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

问题描述 投票:0回答:2

我已经阅读了一些基本的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“包含”操作。由此我认为这将使我不必将相同的代码集复制到每个应用程序(电子表格容器)中,我需要使用已经“测试过的”代码。我假设所包含项目的可用资源与包含项目公共资源的资源相同。总之,我错了。 “属性”存储在定义的电子表格中,并被视为由包含项目“拥有”。

通过使用它,我现在明白“项目密钥”只是在电子表格容器中添加了一个新的“命名空间”。每个命名空间中发生的事情仍然存在于命名空间之间唯一(最简单)的通信是通过函数参数和返回值。

特别是,User和Project属性的作用域包含在其包含的电子表格文档中。电子表格文档中的每个项目都有单独的用户和项目属性集。

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

这是在某处记录的吗?还有其他我需要知道的关于范围界定的事情(来自不同应用程序共享同一项目/库的线程之间的通信?

此外,如果函数传回对库范围中定义的对象的引用,它是否会在调用的项目中保留?我可以传递/返回指向项目的UserProperties“服务”对象的变量,并且可以访问另一个项目中的数据吗?

google-apps-script
2个回答
2
投票

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

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

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

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


0
投票

我也和这个人搏斗过。虽然文档非常好,但有点令人困惑。

共享和不共享的概念让我有点试验和错误。

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

干净利落的东西:-)

吉姆

© www.soinside.com 2019 - 2024. All rights reserved.