使Ramda.js函数全局可访问(没有R.)

时间:2018-02-16 23:02:10

标签: javascript scope global-variables ramda.js

我想在不输入R.

的情况下使用Ramda.js函数

我试图将所有功能添加到全局范围但是它不起作用这是我的尝试

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

另外,我想知道如何使用Ramda库本身。

3 个答案:

答案 0 :(得分:1)

确保设置名为x的属性,而不是x属性: 另外,请务必将NULL的值分配回来,而不是属性名称R[x]

x

你也可以尝试迭代getOwnPropertyNames:

global[x] = R[x];

或者,如果适用,只需将您需要的属性解构为范围:

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

答案 1 :(得分:1)

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

就像@ uber5001提到的解构技术一样,它只是一种方式,但这意味着你首先需要将require整个ramda函数转换为R然后检索你需要的函数。

您还可以require仅使用所需的功能:

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

HTH

答案 2 :(得分:1)

将Ramda的所有功能设置为全局变量可能存在风险。 Ramda有很多功能,其中一些可能会覆盖你现有的全局变量。更好的做法(因为你仍然可以使用影子名称变量,这仍然被认为是一种不好的做法)是with语句,它会破坏对象的所有属性,而不会覆盖外部范围变量。

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

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