|
|
- import _arity from "./internal/_arity.js";
- import _curry1 from "./internal/_curry1.js";
- /**
- * Accepts a function `fn` and returns a function that guards invocation of
- * `fn` such that `fn` can only ever be called once, no matter how many times
- * the returned function is invoked. The first value calculated is returned in
- * subsequent invocations.
- *
- * @func
- * @memberOf R
- * @since v0.1.0
- * @category Function
- * @sig (a... -> b) -> (a... -> b)
- * @param {Function} fn The function to wrap in a call-only-once wrapper.
- * @return {Function} The wrapped function.
- * @example
- *
- * const addOneOnce = R.once(x => x + 1);
- * addOneOnce(10); //=> 11
- * addOneOnce(addOneOnce(50)); //=> 11
- */
-
- var once =
- /*#__PURE__*/
- _curry1(function once(fn) {
- var called = false;
- var result;
- return _arity(fn.length, function () {
- if (called) {
- return result;
- }
-
- called = true;
- result = fn.apply(this, arguments);
- return result;
- });
- });
-
- export default once;
|