Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coffeescript回调作用域问题_Coffeescript_Hubot - Fatal编程技术网

Coffeescript回调作用域问题

Coffeescript回调作用域问题,coffeescript,hubot,Coffeescript,Hubot,嗨,我想为hubot写一个插件脚本。我似乎对范围界定有问题。fork回调中的“msg”引用未定义,我似乎在回调中没有得到任何变量 我对内置的jira-issues.coffee也有同样的问题!昨天在该脚本中,jiraUrl在回调中没有定义。今天早上它又开始工作了,现在它又停止工作了(在我重新启动hubot之后)。我甚至从未修改过它 有没有人经历过这样的事情 githubApi = require("node-github") module.exports = (robot) -> g

嗨,我想为hubot写一个插件脚本。我似乎对范围界定有问题。fork回调中的“msg”引用未定义,我似乎在回调中没有得到任何变量

我对内置的jira-issues.coffee也有同样的问题!昨天在该脚本中,jiraUrl在回调中没有定义。今天早上它又开始工作了,现在它又停止工作了(在我重新启动hubot之后)。我甚至从未修改过它

有没有人经历过这样的事情

githubApi = require("node-github")

module.exports = (robot) ->
  github = new githubApi { "version": "3.0.0" }
  github.authenticate { "type":"basic", "username":process.env.HUBOT_GITHUB_USER, "password":process.env.HUBOT_GITHUB_P
ASSWORD }
  robot.respond /kickstart\s(\S+)/i, (msg) ->
    name = msg.match[1]
    msg.send name
    base_url = process.env.HUBOT_GITHUB_API || 'https://api.github.com'
    github.repos.fork {"user":"Raven", "repo":"Raven","org":"codedemos"}, (err,data) ->
      if err
        msg.send "error :("
      else
        msg.send "Fork Complete..."
它编译为

// Generated by CoffeeScript 1.6.3
(function() {
  var githubApi;

  githubApi = require("node-github");

  module.exports = function(robot) {
    var github;
    github = new githubApi({
      "version": "3.0.0"
    });
    github.authenticate({
      "type": "basic",
      "username": process.env.HUBOT_GITHUB_USER,
      "password": process.env.HUBOT_GITHUB_PASSWORD
    });
    return robot.respond(/kickstart\s(\S+)/i, function(msg) {
      var base_url, name;
      name = msg.match[1];
      msg.send(name);
      base_url = process.env.HUBOT_GITHUB_API || 'https://api.github.com';
      return github.repos.fork({
        "user": "Raven",
        "repo": "Raven",
        "org": "codedemos"
      }, function(err, data) {
        var id;
        if (err) {
          return msg.send("error :(");
        } else {
          return id = data.id;
        }
      });
    });
  };

  msg.send("Fork Complete...");

}).call(this);
它看起来不错,但运行起来会产生:

ReferenceError: msg is not defined
  at Object.<anonymous> (/opt/kbot/scripts/kickstart.coffee:48:2, <js>:36:3)
  at Object.<anonymous> (/opt/kbot/scripts/kickstart.coffee:33:1, <js>:38:4)
  at Module._compile (module.js:456:26)
ReferenceError:未定义消息
反对。(/opt/kbot/scripts/kickstart.coffee:48:2,:36:3)
反对。(/opt/kbot/scripts/kickstart.coffee:33:1,:38:4)
在模块处编译(Module.js:456:26)

最后一行几乎肯定是空格问题。三次检查您在整个文件中使用的缩进是否一致,并确保您的文件在
msg.send“Fork Complete…”
之后有一个最后的换行符。我复制并粘贴了您的coffeescript代码,并将其编译为javascript和最后一条
msg.send
行正确地放入
正确的函数中,而您上面的js将该行放在错误的位置。

啊,是的,我没有注意到!这是coffeescript的要求吗,在eof处有一个空行?我可能应该使用一个编辑器,可以在未来显示空白!谢谢。基本上,coffeescript需要了解缩进级别何时改变,在这种情况下,您不能以缩进行结束文件,而不使用换行符。如果文件的最后一行是flush left,您就不会碰到这个边缘案例。在任何情况下,用换行符结束所有文本文件始终是unix的最佳实践,因此将编辑器设置为自动完成此操作。是的,如果你要用对空格有重要意义的语言编写代码,最好使用一个能够显示和操作空格的编辑器。