gpt4 book ai didi

javascript - 试图理解仿函数,但不明白该代码到底在做什么

转载 作者:行者123 更新时间:2023-12-01 02:29:51 24 4
gpt4 key购买 nike

以下代码将map方法添加到函数原型(prototype)中,以便我们能够映射我们的函数,这基本上将map函数与可映射函数的结果组合在一起。我明白了

Function.prototype.map = function (f) {
const g = this
return function () {
return f(g.apply(this, arguments))
}
}

但不明白以下内容

const Box = x => ({
map: f => Box(f(x)),
fold: f => f(x),
inspect: () => `Box(${x})`
})

const nextCharForNumberString = str =>
Box(str)
.map(s => s.trim())
.map(s => new Number(s))
.map(s => s + 1)
.map(s => String.fromCharCode(s))
.fold(s => s.toLowerCase())

console.log(nextCharForNumberString(' 64 '));

你能帮我理解这一点吗? Box 是一个函数 Box(x),之后我就失去了踪迹。为什么要使用这些括号 ( ({ })) 以及它是如何工作的。感谢您的时间和理解,

顺便说一句,第一个代码取自 https://medium.com/@dtinth/what-is-a-functor-dcf510b098b6第二个代码来自egghead.io的函数式javascript第一课(很遗憾我只是停留在第一课)

最佳答案

这可能有助于使代码脱离 es6 语法。

function Box(param) {
return {
map: function(fn) { return Box(fn(param)); },
fold: function(fn) { return fn(param) },
inspect: function() { return `Box(${param})`;
}
}

示例:let a = Box(1);Box 函数返回对象,并允许您访问 a.map、a.fold ,或a.inspect

a.map 采用函数作为参数。假设函数返回传入的值加上 1

function myFunction(n) { return n + 1 };

您可以调用a.fold(myFunction),返回值将等于2。这是因为我们的初始 param 为 1,并且我们的函数将该参数作为其参数并返回。

基本上,fold 将任何函数应用于您的param 并返回它。

map 类似,只是它返回 Box(myFunction(1)) ,它返回一个带有 param 的新 Box 对象+ 1 因为这就是我们的函数将参数转变为的值。

inspect 只是输出一个字符串,告诉您 param 的当前值是什么。

概述:

function add1(n) { return n + 1 }

let a = Box(1); //param is 1.
a.fold(add1); //translates to add1(1);
a.map(add1); //translates to Box(add(1)), aka, Box(2)
a.inspect(); //translates to "Box(2)"

关于javascript - 试图理解仿函数,但不明白该代码到底在做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com