在哪里可以阅读有关GS文件执行顺序规则的文档?

为了解决这个问题,我创建了两个简单的对象,每个对象都在各自的文件中。

1_File.gs

var ObjB = new Object();
ObjB.sayName = "[" + ObjA.sayName + "]";

0_File.gs
var ObjA = new Object();
ObjA.sayName = " I'm A ";

诸如...的电话
Logger.log(ObjA.sayName + " : " + ObjB.sayName);

...得到错误...
TypeError: Cannot read property "sayName" from undefined.

如果我将代码从1_File.gs移到0_File.gs,反之亦然,则没有错误,并且日志显示正确...



将0_File.gs重命名为2_File.gs也不影响执行顺序,因此我假设顺序取决于首先创建哪个文件。

没有“包含”或“导入”的概念可以使我明确执行顺序吗?

最佳答案



没有此类文档,我认为不会在任何时间发布。同样,C++中静态变量的初始化顺序也是未定义的,并且取决于编译器/链接器。



是的,没有“includes”,“imports”甚至“modules”,但是没有libraries

也有使用闭包的解决方法。波纹管是示例代码。通过执行测试功能,日志包含c.d。这个想法是在所有gs文件中都有一个以init开头的函数。在这些函数中,所有全局变量都被实例化。匿名闭包在Code.gs文件实例化期间执行,并调用所有gs文件的所有“init”函数。

代码。gs

var c;

function callAllInits_() {
  var keys = Object.keys(this);
  for (var i = 0; i < keys.length; i++) {
    var funcName = keys[i];
    if (funcName.indexOf("init") == 0) {
      this[funcName].call(this);
    }
  }
}

(function() {
  callAllInits_();
  c = { value : 'c.' + d.value };
})();

function test() {
  Logger.log(c.value);
}

d.gs
var d;

function initD() {
  d = { value : 'd' };
};

关于google-apps-script - 项目中GS文件的执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12687907/

10-13 04:49