2012-01-30 2 views
7

CoffeeScript를 사용하여 Google Apps Script 용 Javascript 스크립트를 작성하고 싶습니다. 예상되는 형식으로 함수를 생성하는 데 문제가 있습니다.Google Apps Script에 대해 coffeescript에서 글로벌 javascript 함수를 생성하는 방법

Google Apps Script는 스크립트에 최상위 명명 된 기능이 있어야합니다. 이 기능을 행복하게 Google 애플리케이션 스크립트를 인식, 예를 들어

(나는 ... 그래서 내가 예와 의미를 설명하겠습니다, 잘못된 용어를 사용하고있을 수 있습니다) :

function triggerableFunction() { 
    // ... 
} 

... 이 기능은 아니지만 (이것은 구문 분석,하지만 당신은 그것을 실행할 수 없습니다되지 않습니다) :

var nonTriggerableFunction; 

nonTriggerableFunction = function() { 
    // ... 
}; 

나는 커피 스크립트와 함께, 내가 얻을 수있어 가장 가까운는 것으로 나타났습니다 위의 nonTriggerableFunction 양식. 위의 triggerableFunction과 같은 명명 된 함수를 생성하는 가장 좋은 방법은 무엇입니까?

최상위 기능 안전 래퍼가없는 을 컴파일하기 위해 이미 '베어'옵션 (-b 스위치)을 사용하고 있습니다.

CoffeeScript와 Google App Script를 결합한 웹에서 내가 발견 한 프로젝트는 Gmail GTD Bot입니다. 이는 백틱 (back-tick)의 조합을 사용하고 결과에서 일부 라인을 수동으로 제거하도록 요청하는 것으로 보입니다 암호. (의 끝과 README의 '설치'섹션 참조). 좀 더 간단하고 깨끗한 솔루션을 기대합니다.

답변

3

각 기능에 대해 embedded Javascript 한 줄을 사용하여이 작업을 수행 할 수 있습니다.

예. 이 커피 스크립트 :

myNonTriggerableFunction = -> 
    Logger.log("Hello World!") 

`function myTriggerableFunction() { myNonTriggerableFunction(); }` 

...이 자바 스크립트를 생성합니다의 '벌거 벗은'옵션 (-b 옵션)와 함께 커피 컴파일러를 호출 할 때 : 위의 예와

var myNonTriggerableFunction; 

myNonTriggerableFunction = function() { 
    return Logger.log("Hello World!"); 
}; 

function myTriggerableFunction() { myNonTriggerableFunction(); }; 

, Google 애플리케이션 스크립트는 myTriggerableFunction을 직접 트리거 할 수 있습니다.

1

이 당신에게 글로벌라는 기능을 제공한다 (예, 조금 해키,하지만 훨씬 덜 사용하여 역 따옴표) :

# wrap in a self invoking function to capture global context 
do -> 
    # use a class to create named function 
    class @triggerableFunction 
    # the constructor is invoked at instantiation, this should be the function body 
    constructor: (arg1, arg2) -> 
     # whatever 
+0

글로벌 명명 된 기능을 생성하지 않는 것 같습니다. } (함수() { 복귀 this.triggerableFunction = (함수() { 함수 triggerableFunction (ARG1, ARG2) {} 복귀 triggerableFunction :이 -b 스위치를 사용하는 경우는, 생성 무엇)(); )})(); – mattbh

+0

브라우저에서 코드를 실행 했습니까? 이 함수는 전역 컨텍스트에 연결되어 있으므로 전역입니다. 그리고 이름은 :'triggerableFunction.name === "triggerableFunction"'입니다.물론 함수 선언문을 생성하지는 않지만 질문 한 내용이 아니라고 생각합니다. – Adrien

+0

코드가 브라우저가 아닌 Google Apps Script 엔진에서 실행되었습니다. Google Apps Script 엔진이 필요로하는 함수 문을 생성하는 방법을 실제로 묻습니다. 'gmail-gtd-bot'(back-ticks 사용)이 사용하는 해결 방법은 저에게 효과적이었습니다. – mattbh

11
커피 스크립트는 암시 적으로 전역 네임 스페이스에서 아무것도 만들 수 없습니다

; 하지만 전역 네임 스페이스를 직접 지정하여이 작업을 수행 할 수 있습니다.

window.someFunc = (someParam) -> 
    alert(someParam) 
+0

이렇게하면 명명 된 함수가 아닌 익명의 함수가 만들어집니다. 익명 함수는 someFunc에 할당됩니다. 새 함수에 중단 점을 넣고 스택 추적을 보면 분명합니다. –