如何在JS中演示简单的无点样式

时间:2019-03-28 10:50:06

标签: javascript functional-programming pointfree

无点样式或默认编程在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演示这种效果?

2 个答案:

答案 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的最后一个参数是咖喱,而函数参数都是一元函数。