8

我正在研究使用谷歌应用程序脚本构建一个工具集。问题在于,据我所知,只允许一个级别的组织。您可以创建一个名为 Stopwatch 的库并调用方法 Stopwatch.start() 和 Stopwatch.stop() 这很酷。

我想到的是更像 Utils.Stopwatch().start() 和 Utils.Timer.start() 等。我认为这在 javascript 中当然是可能的,但为了继续破坏 Apps Script 自动完成功能,它需要以某种格式添加。下面是一个做错的例子(给出一个错误),但可能会节省一些时间。它基于这篇文章。

/**
* A stopwatch object.
* @return {Object} The stopwatch methods
*/
function Stopwatch() 
{
  var current;

  /**
  * Stop the stopwatch.
  * @param {Time} time in miliseconds
  */
  function timeInSeconds_(time)
  {
    return time/1000;
  }

  return 
    {
      /**
      * Start the stopwatch.
      */
      start: function() 
      {
        var time = new Date().getTime();
        current = timeInSeconds_(time);
      },

      /**
      * Stop the stopwatch.
      * @return {decimal} time passed since calling 
      *    start (in seconds)
      */
      stop: function() 
      {
        var time = new Date().getTime();
        var difference = timeInSeconds_(time) - this.current;
        return difference.toFixed(3);
      }
    };
}

谢谢

4

4 回答 4

4

在 Google 原生支持此类功能之前,您可以使用与构造函数相同级别的注释来定义空函数。您甚至可以保留原始代码结构。这将在编辑器中启用自动完成。另外,您将获得为您的库自动生成的文档,例如https://script.google.com/macros/library/versions/d/YOUR_PROJECT_KEY

例子:

/**
* Constructor.
* @constructor
* @param {String} apiKey Doxument API key
* @param {String} apiToken Doxument API token
*/    
function DoxumentApi(apiKey, apiToken) {
  // public api
  return {
        get: function(id, params) {
          var httpResponse = execute('/docs/' + id + '.json?' + buildQuery(params));
          return parse(httpResponse);
        }
    }
}

/**
* Get document record.
* @param {String} id document id
* @param {Object=} params optional. extra get params
* @return {Object} Document object
*/    
function get(id, params) {}
于 2012-08-26T09:50:39.587 回答
3

您可以在此处提交功能请求:

http://code.google.com/p/google-apps-script-issues/issues/list

于 2012-06-05T05:11:21.660 回答
2

它还不起作用,但团队确实知道它。在此之前,您需要在站点上记录您的库。我想您也可以将方法放在描述中。对于新服务来说,这确实是一个很好的开始,但我和你在一起大约 5 分钟,并且已经想要更多。;)

于 2012-06-05T23:33:29.270 回答
0

使用 OO 怎么样?

它看起来组织得很好,很容易记录。

/**
 * A stopwatch Class.
 *
 * @constructor
 */
function Stopwatch() {
  this.current =  new Date().getTime();
}

/**
 * Starts the stopwatch
 */
Stopwatch.prototype.start = function(){
  this.current = new Date().getTime();
};

/**
 * Stops the stopwatch
 *
 * @return {number} Number of seconds since Stopwatch was started
 */
Stopwatch.prototype.stop = function(){
  return ((new Date().getTime()) - this.current) / 1000;
};

例子。如果您的库被导入为Utils.

var s = new Utils.Stopwatch();
s.start();

// (...) 

Logger.log(s.stop());

PS:这是未经测试的代码。

作为副作用,您可以有多个秒表,每个秒表都维护自己的局部变量current

更新

虽然这在 JSDoc 之后得到了正确记录,但它目前没有使用 Google Apps 脚本自动完成这些方法。

于 2012-06-05T07:18:20.753 回答