无点样式或默认编程在Wikipedia中使用Python进行了说明。
template <typename Invokable>
void callback_adapter(void *invokable_on_heap)
{
auto retyped_callback = std::unique_ptr<Invokable>{
reinterpret_cast<Invokable*>(invokable_on_heap)
};
(*retyped_callback)(std::forward<Ts>(parameters)...);
// Note: invokable_on_heap will be delete'd
}
template <typename Invokable>
void register_invokable_as_callback(Invokable callback_) {
Invokable* invokable_on_the_heap = new Invokable(std::move(callback_));
register_callback(&callback_adapter<Invokable>, invokable_on_the_heap);
}
和..
def example(x):
y = foo(x)
z = bar(y)
w = baz(z)
return w
如何以最简单易懂的形式使用JS演示这种效果?
答案 0 :(得分:2)
可以轻松地将其转换为JS:
function example(x) {
const y = foo(x);
const z = bar(y);
const w = baz(z);
return w;
}
...和
function flow(fns) {
function reducer(v, fn) {
return fn(v);
}
return fns.reduce.bind(fns, reducer);
}
const example = flow([baz, bar, foo]);
答案 1 :(得分:1)
这是函数组合,最简单的解决方案是为给定的示例提供具有正确Arity的组合组合器:
const foo = x => `foo(${x})`;
const bar = x => `bar(${x})`;
const baz = x => `baz(${x})`;
const comp3 = (f, g, h) => x => f(g(h(x)));
const fun = comp3(foo, bar, baz);
console.log(
fun(123))
为此,comp3
的最后一个参数是咖喱,而函数参数都是一元函数。