代码之家  ›  专栏  ›  技术社区  ›  Engineer Passion

制作Ramda。js函数可全局访问(无R.)

  •  1
  • Engineer Passion  · 技术社区  · 7 年前

    我想用拉姆达。js函数,无需键入 R.

    我已经尝试将所有函数添加到全局范围,但没有成功这是我的尝试

    const R = require('ramda'); // R is an object containing lots of functions
    for(let x in R) {
        global.x = x;
    }
    

    此外,我想知道如何使用Ramda库本身来实现它。

    3 回复  |  直到 7 年前
        1
  •  1
  •   uber5001    7 年前

    确保您正在设置名为x的属性,而不是x属性: 此外,请确保指定 R[x] 返回,而不是属性名称 x

    global[x] = R[x];
    

    您还可以尝试迭代getOwnPropertyNames:

    for (const prop of Object.getOwnPropertyNames(R)) {
        global[prop] = R[prop]
    }
    

    或者,如果适用,只需将所需的属性分解到您的范围内:

    const {someProp, someOtherProp} = R;
    
        2
  •  1
  •   Harsh Gupta    7 年前

    根据评论,虽然我不同意额外键入2个字符可以被称为小题大做,但这是你的感受。

    就像@uber5001提到的去结构技术一样,这是一种方法,但它意味着你首先需要 require 整个ramda功能 R 然后检索所需的函数。

    您还可以 要求 只有所需的功能:

    const uniq = require('ramda/src/uniq')
    const zip = require('ramda/src/zip')
    // and so on
    

    HTH公司

        3
  •  1
  •   Bary12    7 年前

    将Ramda的所有功能设置为全局函数可能有风险。Ramda有很多函数,其中一些函数可能会覆盖现有的全局函数。更好的做法(这仍然被认为是不好的做法,因为您仍然可以对名称变量进行阴影处理)是 with 语句,该语句在不重写外部作用域变量的情况下分解对象的所有属性。

    with(R) {
      pipe(
        map(x => x ** 2),
        filter(x => x > 24)
      )([3, 4, 5, 6]); // => [25, 36]
    }
    

    请注意,with语句在严格模式下被禁用。