2017-05-02 13 views
0

sweet.jsが生成する出力に任意の文字列を挿入するにはどうすればよいですか?sweet.jsの出力に任意の文字列を挿入する

これは、さまざまな条件に基づいて文字列が異なる場所をプログラムで処理する場合に非常に便利です。

たとえば、次のコードの25行目で、結果として文字列を挿入したいとします。

sweet.jsコード:

import { produceNormalParams } from './abc/produceNormalParams' 
    import { produceParamChecks } from './abc/produceParamChecks' 
    import { produceInnerChecks } from './abc/produceInnerChecks' 

    syntax function = function(ctx) { 
     let funcName = ctx.next().value; 
     let funcParams = ctx.next().value; 
     let funcBody = ctx.next().value; 

     //produce the normal params array 
     var normalParams = produceNormalParams(funcParams) 

     //produce the checks 
     var paramChecks = produceParamChecks(funcParams) 

     //produce the original funcBody code 
     var inner = produceInnerChecks(funcParams) 

     var someArbitraryString = "console.log('hey')" 

     //put them together as the final result 
     var result = #`function ${funcName} ${normalParams} { 
      ${someArbitraryString} 
      ${paramChecks} 
      ${inner} 
     }` 

     return result 
    } 

例入力:

module.exports = multiply 

    function multiply(a:array,b,c:array) { 
     return a * c 
    } 

出力例:

// Example Output 
    module.exports = multiply; 
    function multiply(a_31, b_32, c_33) { 
     console.log('hey') 
     if (Object.prototype.toString.call(a_31) !== "[object Array]") throw new Error("Must be array:" + a_31); 
     if (Object.prototype.toString.call(c_33) !== "[object Array]") throw new Error("Must be array:" + c_33); 
     return a_31 * c_33; 
    } 

答えて

1

あなたは構文テンプレートに任意の文字列を挿入することはできませんが、あなたは他の構文テンプレートを補間できます。

import { produceNormalParams } from './abc/produceNormalParams' for syntax; 
import { produceParamChecks } from './abc/produceParamChecks' for syntax; 
import { produceInnerChecks } from './abc/produceInnerChecks' for syntax; 

syntax function = function(ctx) { 
    let funcName = ctx.next().value; 
    let funcParams = ctx.next().value; 
    let funcBody = ctx.next().value; 

    //produce the normal params array 
    var normalParams = produceNormalParams(funcParams); 

    //produce the checks 
    var paramChecks = produceParamChecks(funcParams); 

    //produce the original funcBody code 
    var inner = produceInnerChecks(funcParams); 

    var someArbitrarySyntax = #`console.log('hey')`; 

    //put them together as the final result 
    var result = #`function ${funcName} ${normalParams} { 
     ${someArbitrarySyntax} 
     ${paramChecks} 
     ${inner} 
    }`; 

    return result 
} 

for syntax import文の末尾。これらは、コンパイル時にインポートが利用できるようにするために必要です。

+0

サンプルアップが機能します。しかし、プログラムで生成された既存の文字列を取得することは可能ですか?私は基本的にいくつかのパラメータをライブラリに渡してライブラリに文字列を返し、その文字列を挿入したいとします。 –

+0

現時点ではありません。それがあなたのライブラリで、他のコンテキストでそれを使用していない場合は、文字列の代わりに構文テンプレートを返すことができます。 –

関連する問題