functional-programming - ImmutableJS vs Ramda 或 ImmutableJS + Ramda - 它们可以一起使用吗

标签 functional-programming immutable.js ramda.js

我正在探索这两个库,对我来说 ImmutableJS具有(主要)不可变的数据结构,而 Ramda有瑞士军刀套装FP实用程序。

当我谷歌时,我看到类似 Ramda 的文章对比 ImmutableJS推荐一个或另一个,但乍一看,至少对我来说,它们相辅相成。

我可以想象我所有的数据结构都在 React 中应用程序是 ImmutableJS ( List , Set , Map , Record ) 但使用 Ramda组合函数,在 ImmutableJS 上进行转换收藏等,或者当我错过一些功能时,例如 uniq .

你怎么认为?这是明智的做法吗?

最佳答案

它们可以一起使用吗?不顺利或无缝。

就目前的情况而言,这很可能是一种方法,至少会导致您遇到一些困难,而且很可能会遇到很多困难。原因是 immutable 的结构与 ramda 的功能不兼容。您可以创建包装器或互操作来修补此功能,但这似乎是一个相当大的项目。

This issue更详细地介绍了一些潜在的 immutablejs 替代方案,例如 List.

这是一个很小的例子,说明为什么缺乏互操作性是一个问题:

const { Map } = Immutable;
const { path } = R;

const standardObject = {a: 1, b: 2, c: 3};
const map1 = Immutable.Map(standardObject);

const getA = path(['a']);

const result = getA(map1);
const defaultResult = getA(standardObject);

console.dir(result);
console.dir(defaultResult);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>


您大概可以将转换构建到您在 ramda 中所做的工作中;这似乎是解决问题的最简单方法,尽管它确实意味着您会将代码非常紧密地与不可变数据结构联系起来。这可能是这样的:

const { Map } = Immutable;
const { path, pipe } = R;

const standardObject = {a: 1, b: 2, c: 3};
const map1 = Immutable.Map(standardObject);

const toStandard = map => map.toObject()

const getA = pipe(
  toStandard,
  path(['a'])
)

const result = getA(map1)

console.dir(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

关于functional-programming - ImmutableJS vs Ramda 或 ImmutableJS + Ramda - 它们可以一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537782/

相关文章:

swift - Grand Central Dispatch 寻找不同的方法

javascript - 嵌套 if 为 : is it better to use if (x) {statement;} or if (! x) return;陈述;

Java 流对映射列表的值求和

javascript - ImmutableJS - 更新矩阵的单元格

javascript - 是否有与 Ramda 的 'evolve' 函数等效的 lodash/fp?

functional-programming - Scheme中流的空间复杂度

javascript - immutable.js & react.js setState 清除对象原型(prototype)

javascript - Flow 和 Immutable.js 映射

javascript - lambda : rewriting to point free style

javascript - 是数组中的值还是对象 Ramda 中的字符串