- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题 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/placeholder
与 foo
没有什么不同在
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 推广。 a
和 b
是任何类型。 (...)
是类型元组,[a]
是一个列表,其元素是 a
. a -> b
是一个接受 a
类型参数的函数并产生 b
类型的返回值, 并且是右结合的。有问题的例子是:
It is a function that takes an argument 接受两个参数(类型分别为a
和b
)并返回类型为a
的值的函数;并生成一个函数,该函数接受类型为 a
的参数并返回一个函数,该函数接受一个参数,该参数是 b
类型的元素列表,返回类型为 a
的值.
这读起来很困惑,但非科里化的描述会更容易一些:它是一个接受三个参数的函数:第一个是函数(如上所述),第二个是 a
的值。 ,第三个是 b
的列表元素,并返回值 a
.
具体来说,R.reduce
是这样一个函数:在
R.reduce(add, 10, numbers);
add
是一个函数,它接受两个整数(a
和 b
是相同的整数),并返回一个整数((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/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭去年。 Improve th
我正在尝试向嵌套对象添加新属性 width 和 height。 我的数据结构是这样的: const graph = { id: 'root', children: [ {
我正在尝试向嵌套对象添加新属性 width 和 height。 我的数据结构是这样的: const graph = { id: 'root', children: [ {
我想像这样计算三个数组。 const Data = { x : [2,4,6], y : [10,10,10], z : [5,5,5] } const XtimesYplusZ
转换以下对象的最简单方法是什么? // original { name: "bob", age: 24 } // result { name: "bob", age: 24, de
这是初始状态。 const All = { id : [ "a", "b", "c", "d", "e"], count : [1, 2, 2], } 我想把 All.id 拆分成 [ ["a
let arr = [ { name: 'Anna', q: { name: 'Jane' } } ]; const getName = R.prop('n
我有下面的代码,我想在其中填写id,所以我想写这样的东西: const data = [ { id: 'some-id' }, { id: 'some-other-id' }, { id: 't
我有一个类似这样的列表: var list = [ { stack: [ { file: 'abc' } ] }, { st
鉴于下面的功能,如何将其转换为无点样式?使用 Ramda 的 prop 会很好和 path并跳过数据参数,但我无法弄清楚正确的语法。 const mapToOtherFormat = (data) =
Ramda 适合懒人 Ramda 的 transduce启用 creation of lazy sequences . 一对多 R.chain可以在转换器中用作一对多运算符,如下所示 ( REPL )
Ramda 是否具有从列表中删除错误值的功能? 我知道我们可以简单地做 var compact = R.filter(R.identity);但我错过了现成的功能吗? 最佳答案 没有直接的等价物,但
我是 的新手 lambda 我正在努力实现以下目标: 我有一组对象(即消息)。 我想按对方 ID 对消息进行分组(发件人或收件人 ID,不是 1,请参阅下面的 groupBy lambda)。 我将获
我正在探索这两个库,对我来说 ImmutableJS具有(主要)不可变的数据结构,而 Ramda有瑞士军刀套装FP实用程序。 当我谷歌时,我看到类似 Ramda 的文章对比 ImmutableJS推荐
试图弄清楚 IO monad 是如何工作的。 使用下面的代码,我读取了 filenames.txt 并使用结果重命名目录 testfiles 中的文件。这显然是未完成的,所以我没有实际重命名我登录到控
我是 ramdajs 的新手。假设我有一个对象: {a: 1, b: 2, c: 3} 我可以这样做来将 a 更改为 11: const aLens = R.lensProp('a'); R.
我想从对象中删除所有空值。让我们假设: const data = { key1: 'ok', key2: null, key3: '', // should be removed too
我有两个柯里化(Currying)函数 f 和 g: f: a -> b -> c g: a -> c -> d 我想创建h: h: a -> b -> d 目前我正在通过 pipe 编写它们: co
我很想学习 js 中的函数式编程,但是我遇到了困难。我觉得我一直在做这样的事情,这感觉根本不对: export const getParamFromUrl = R.curry((name, url)
我试图将一个函数传递到一个过滤器中,该过滤器本身嵌套在更深的函数中 从概念上讲,类似于这个(损坏的)示例: const testData = [ {foo: "foo", bar: ""} ];
我是一名优秀的程序员,十分优秀!