我使用以下函数将一些数据发送到React组件,方法是将它包装在更高阶的组件中:
import { equals, filter, isNil, prop, where } from 'ramda'
const example = getChapter => ownProps =>
filter(
where({
sectionId: equals(prop('section', ownProps)),
subsectionId: isNil,
sub2sectionId: isNil,
sub3sectionId: isNil
}),
prop('getContents', getChapter)
)
我熟悉函数式编程的概念,但对Ramda库来说还是比较新的。现在,我想使用Ramda重写此代码,以便ownProps
和getChapter
可以被淘汰,只是作为学术练习。
似乎我应该首先消除ownProps
因为参数的顺序?虽然我甚至不确定。
非常感谢任何帮助!
PS。我知道在上面的代码ownProps.section
中,prop('section', ownProps)
对于prop
更具可读性和优先性,但我希望$string .= $sender_name."\r\n";
$string .= $sender_number."\r\n";
$string .= $sender_message."\r\n";
$body .= base64_encode(chunk_split($string)); // I think since your transfer encoding is base64, it will not respect the line endings added by the chunk_split not sure tho so be sure to encode it all with base64
函数位于无点的路径上相当于上面的代码,因此包含它们。
答案 0 :(得分:2)
可以这样做吗?当然。这是一个版本:
const example2 = useWith(flip(filter), [prop('getContents'), pipe(
prop('section'),
equals,
objOf('sectionId'),
where,
both(where({
subsectionId: isNil,
sub2sectionId: isNil,
sub3sectionId: isNil
}))
)])
其中最不寻常的功能是Ramda的useWith
,其行为大致类似于useWith(f, [g, h])(x, y) ~> f(g(x, y), h(x, y))
。这不是一个标准的功能语言结构,只有一个有助于使一些难以实现的无点功能。然而,在ES6 / ES2015无处不在之前,它几乎是有用的。
您可以在 Ramda REPL 上看到这一点。
你应该吗?好吧,你说它可能是一次学术活动。但我觉得这比原版要差得多。在我看来这只是一种学习Ramda的一些功能的方法。我不会投入生产。
答案 1 :(得分:2)
除了斯科特的答案,这是另一种可能的变体:
useWith(
flip(filter),
[
prop('getContents'),
pipe(
prop('section'),
equals,
assoc('sectionId', R.__, {
subsectionId: isNil,
sub2sectionId: isNil,
sub3sectionId: isNil
}),
where
)
])
如果你按照反驳论点的顺序打电话给你,你就不需要flip
上的filter
。