gpt4 book ai didi

javascript - 了解 Ramda.js

转载 作者:行者123 更新时间:2023-11-29 19:20:44 25 4
gpt4 key购买 nike

问题 1:

   var _curry1 = function _curry1(fn) {
return function f1(a) {
if (arguments.length === 0) {
return f1;
} else if (a != null && a['@@functional/placeholder'] === true) {
return f1;
} else {
return fn.apply(this, arguments);
}
};
};

检查 a['@@functional/placeholder'] === true 的目的是什么?

问题2:

http://ramdajs.com/0.18.0/docs/#reduce

如何阅读符号?

(a,b -> a) -> a -> [b] -> a

第一次看到这样的符号,从哪里来的?

最佳答案

问题 1:

没有“符号”。 __.js应该清除它:

module.exports = {'@@functional/placeholder': true};

所以 @@functional/placeholderfoo 没有什么不同在

a = { foo: true }
a.foo
a["foo"]

(很明显,你不能写 a.@@functional/placeholder 因为那里有很多奇怪的符号。)

在该文件中也可以看到意图:

/**
* A special placeholder value used to specify "gaps" within curried functions,
* allowing partial application of any combination of arguments,
* regardless of their positions.
*
* If `g` is a curried ternary function and `_` is `R.__`, the following are equivalent:
*
* - `g(1, 2, 3)`
* - `g(_, 2, 3)(1)`
* - `g(_, _, 3)(1)(2)`
* - `g(_, _, 3)(1, 2)`
* - `g(_, 2, _)(1, 3)`
* - `g(_, 2)(1)(3)`
* - `g(_, 2)(1, 3)`
* - `g(_, 2)(_, 3)(1)`
...

所以目的是在柯里化(Currying)时能够“跳过”一些地方。测试决定一个参数是一个真正的参数还是 __.js占位符,并相应地表现。为什么是@@functional/placeholder - 大概正是希望它太怪异,从而不会与任何人的合法数据发生冲突。

问题 2:

该符号是类型理论中的标准符号,并由 Haskell 推广。 ab是任何类型。 (...)是类型元组,[a]是一个列表,其元素是 a . a -> b是一个接受 a 类型参数的函数并产生 b 类型的返回值, 并且是右结合的。有问题的例子是:

It is a function that takes an argument 接受两个参数(类型分别为ab)并返回类型为a的值的函数;并生成一个函数,该函数接受类型为 a 的参数并返回一个函数,该函数接受一个参数,该参数是 b 类型的元素列表,返回类型为 a 的值.

这读起来很困惑,但非科里化的描述会更容易一些:它是一个接受三个参数的函数:第一个是函数(如上所述),第二个是 a 的值。 ,第三个是 b 的列表元素,并返回值 a .

具体来说,R.reduce是这样一个函数:在

R.reduce(add, 10, numbers);

add是一个函数,它接受两个整数(ab 是相同的整数),并返回一个整数((a, b) -> a); 10是整数类型(a); numbers 是一个整数列表 ( [b] );返回值是一个整数(a)。

请注意,它混合了柯里化(Currying)和非柯里化(Currying)语法;如果完全 curry ,add将是 a -> b -> a , 不是 (a, b) -> a .

关于javascript - 了解 Ramda.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33142252/

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