我刚刚开始使用 Ramda,而且我对函数式编程总体来说还比较陌生。我开始掌握如何构建我的程序的窍门,但我一直对某个方面感到困惑。我觉得我一定遗漏了一些关键概念。
我什至不确定如何表达我的问题,所以我将从一个例子开始。此代码片段是任意多边形质心计算的一部分:
var centroidX = R.converge(
R.divide,
R.compose(
R.sum,
R.map(
R.converge(
R.multiply,
R.converge(R.add, x1, x2),
diffOfProducts
)
),
makeVertexPairs
),
sixTimesPolyArea
);
var centroidY = R.converge(
R.divide,
R.compose(
R.sum,
R.map(
R.converge(
R.multiply,
R.converge(R.add, y1, y2),
diffOfProducts
)
),
makeVertexPairs
),
sixTimesPolyArea
);
Geom.centroid = R.curry(function(vertices) {
return [ centroidX(vertices), centroidY(vertices) ];
});
centroidX
请注意,和之间的唯一区别centroidY
是 X 坐标调用x1
和x2
靠近中间,而 Y 坐标调用y1
和y2
靠近中间。
是否有一些简单的方法来重构这种共性,以便我可以执行以下操作:
var centroidCoord = R.converge(
R.divide,
R.compose(
R.sum,
R.map(
R.converge(
R.multiply,
R.converge(R.add, R.__, R.__),
diffOfProducts
)
),
makeVertexPairs
),
sixTimesPolyArea
);
Geom.centroid = R.curry(function(vertices) {
return [ centroidX(x1, x2, vertices), centroidY(y1, y2, vertices) ];
});
我知道这还不算接近。我只是想表达我想要完成的事情。有什么建议吗?