2013-07-03 2 views
3

안녕하세요, hubot 용 addon 스크립트를 작성하려고합니다. 나는 범위 지정에 문제가있는 것 같습니다. 포크 콜백 내 "msg"참조는 정의되어 있지 않습니다. 콜백에 어떤 변수도없는 것 같습니다.Coffeescript 콜백 범위 지정 문제

나는 또한 내장 된 jiraissues.coffee와 동일한 문제가 발생했습니다! 어제 그 스크립트에서 jiraUrl은 콜백에서 정의되지 않았습니다. 오늘 아침에 다시 작동했는데 이제는 다시 작동을 멈췄습니다. 나는 그것을 결코 수정하지 않았다.

경험이있는 사람이 있습니까?

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) 

답변

2

그것은 거의 확실히 그 마지막 줄에 공백 문제입니다. 전체 파일에서 일관된 들여 쓰기를 사용하는지 확인하고 msg.send "Fork Complete..." 다음에 파일에 최종 줄 바꿈이 있는지 확인하십시오. 귀하의 coffeescript 코드를 복사하고 붙여 넣은 자바 스크립트에 컴파일하고 마지막 msg.send 라인은 올바른 기능을 넣어 inside 적절한 기능을, 위의 귀하의 js 위의 잘못된 위치에 그 라인이 있습니다.

+0

아, 나는 그것을 알아 차리지 못했습니다! eof에 빈 줄을 넣으려면 coffeescript의 요구 사항입니까? 앞으로 공백을 표시 할 수있는 편집기를 사용해야 할 것입니다. 감사. – Sam

+0

기본적으로 coffeescript는 들여 쓰기 수준이 변경 될 때를 이해해야하며,이 경우 들여 쓰기 된 줄과 줄 바꿈이없는 파일은 끝낼 수 없습니다. 파일의 마지막 줄이 왼쪽으로 치우쳐 있으면이 딱딱한 부분은 치지 않습니다. 어쨌든 모든 텍스트 파일을 개행 문자로 끝내는 것이 유닉스의 베스트 프랙티스 였기 때문에 편집기를 자동으로 설정하도록 설정하십시오. 그리고 공백이 중요한 언어로 작성하는 경우 공백을 표시하고 조작하기에 좋은 편집기를 사용하는 것이 가장 좋습니다. –