You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
project/Src/command_center/web-command-center/backend/node_modules/generate-function
topfive 09b105afc5
系统重构
11 months ago
..
.travis.yml 系统重构 11 months ago
LICENSE 系统重构 11 months ago
README.md 系统重构 11 months ago
example.js 系统重构 11 months ago
index.js 系统重构 11 months ago
package.json 系统重构 11 months ago
test.js 系统重构 11 months ago

README.md

generate-function

Module that helps you write generated functions in Node

npm install generate-function

build status

Disclamer

Writing code that generates code is hard. You should only use this if you really, really, really need this for performance reasons (like schema validators / parsers etc).

Usage

const genfun = require('generate-function')
const { d } = genfun.formats

function addNumber (val) {
  const gen = genfun()

  gen(`
    function add (n) {')
      return n + ${d(val)}) // supports format strings to insert values
    }
  `)

  return gen.toFunction() // will compile the function
}

const add2 = addNumber(2)

console.log('1 + 2 =', add2(1))
console.log(add2.toString()) // prints the generated function

If you need to close over variables in your generated function pass them to toFunction(scope)

function multiply (a, b) {
  return a * b
}

function addAndMultiplyNumber (val) {
  const gen = genfun()
  
  gen(`
    function (n) {
      if (typeof n !== 'number') {
        throw new Error('argument should be a number')
      }
      const result = multiply(${d(val)}, n + ${d(val)})
      return result
    }
  `)

  // use gen.toString() if you want to see the generated source

  return gen.toFunction({multiply})
}

const addAndMultiply2 = addAndMultiplyNumber(2)

console.log(addAndMultiply2.toString())
console.log('(3 + 2) * 2 =', addAndMultiply2(3))

You can call gen(src) as many times as you want to append more source code to the function.

Variables

If you need a unique safe identifier for the scope of the generated function call str = gen.sym('friendlyName'). These are safe to use for variable names etc.

Object properties

If you need to access an object property use the str = gen.property('objectName', 'propertyName').

This returns 'objectName.propertyName' if propertyName is safe to use as a variable. Otherwise it returns objectName[propertyNameAsString].

If you only pass gen.property('propertyName') it will only return the propertyName part safely

License

MIT