- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaScript功能编程库Ramda.js的API文档包含符号缩写,但未提供用于了解这些符号的图例。我可以在某个地方(网站,文章,备忘单等)破译这些内容吗?
Ramda.js API文档中的一些示例:
Number -> Number -> Number
Apply f => f (a -> b) -> f a -> f b
Number -> [a] -> [[a]]
(*... -> a) -> [*] -> a
{k: ((a, b, ..., m) -> v)} -> ((a, b, ..., m) -> {k: v})
Filterable f => (a -> Boolean) -> f a -> f a
Lens s a = Functor f => (a -> f a) -> s -> f s
(acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
(Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a)
最佳答案
从Ramda Wiki:
(第1部分/第2部分-对于单个SO回答来说太长了!)
类型签名
(或“所有这些有趣的箭头是什么?”)
查看Ramda的 over
函数的文档,
我们首先看到的是两行,如下所示:
Lens s a -> (a -> a) -> s -> s
Lens s a = Functor f => (a -> f a) -> s -> f s
// length :: String -> Number
const length = word => word.length;
length('abcde'); //=> 5
length
,它接受类型为单词的单词
String
,并返回字符串中的字符数,即
Number
。函数上方的注释是签名行。开始
::
”,然后是
->
”,在输出中为“
→
”
// charAt :: (Number, String) -> String
const charAt = (pos, word) => word.charAt(pos); charAt(9, 'mississippi'); //=> 'p'
Number
-一个单词-这是一个
String
-它返回一个
String
或空
String
。
(Number, String)
。与许多语言一样,JavaScript函数
(String, Number)
有
// foundAtPos :: (Number, String, String) -> Boolean
const foundAtPos = (pos, char, word) => word.charAt(pos) === char;
foundAtPos(6, 's', 'mississippi'); //=> true
(pos, word) => word.charAt(pos);
=>
”,以及一个瘦小的箭头,
->
”,我们获得签名:
// (Number, String) -> String
// addAll :: [Number] -> Number
const addAll = nbrs => nbrs.reduce((acc, val) => acc + val, 0);
addAll([8, 6, 7, 5, 3, 0, 9]); //=> 38
Number
的列表。有一个单独的
[ ]
”中。一个列表
String
将为
[String]
,列表的
Boolean
将为
[Boolean]
,
Number
的列表列表将是
[[Number]]
。
// findWords :: String -> [String]
const findWords = sentence => sentence.split(/\s+/);
findWords('She sells seashells by the seashore');
//=> ["She", "sells", "seashells", "by", "the", "seashore"]
// addToAll :: (Number, [Number]) -> [Number]
const addToAll = (val, nbrs) => nbrs.map(nbr => nbr + val);
addToAll(10, [2, 3, 5, 7]); //=> [12, 13, 15, 17]
Number
,
val
和
Number
列表,
nbrs
,并返回
Number
的新列表。
Number
和列表的其他任何函数
Number
,并返回
Number
的列表。[^ theorems]
// applyCalculation :: ((Number -> Number), [Number]) -> [Number]
const applyCalculation = (calc, nbrs) => nbrs.map(nbr => calc(nbr));
applyCalculation(n => 3 * n + 1, [1, 2, 3, 4]); //=> [4, 7, 10, 13]
calc
函数由
(Number → Number)
描述。
// makeTaxCalculator :: Number -> (Number -> Number)
const makeTaxCalculator = rate => base =>
Math.round(100 * base + base * rate) / 100;
const afterSalesTax = makeTaxCalculator(6.35); // tax rate: 6.35%
afterSalesTax(152.83); //=> 162.53
makeTaxCalculator
接受税率,以百分比表示(类型
Number
,并返回一个新函数,该函数本身接受
Number
并返回
Number
。再次,我们描述由
(Number → Number)
,使整个功能签名
Number → (Number → Number)
。
makeTaxCalculator
像那样。 curry 对于Ramda至关重要,我们可能会考虑
calculateTax
可以像
makeTaxCalculator
一样使用的功能,如果
// calculateTax :: Number -> Number -> Number
const calculateTax = R.curry((rate, base) =>
Math.round(100 * base + base * rate) / 100);
const afterSalesTax = calculateTax(6.35); // tax rate: 6.35%
afterSalesTax(152.83); //=> 162.53
// OR
calculateTax(8.875, 49.95); //=> 54.38
Number → Number → Number
。在Haskell中,歧义得以解决
calculateTax(6.35)
,因为我们选择不提供
Number → Number
部分
calculateTax(8.875, 49.95)
时,我们已经提供了
Number
参数,因此仅返回最后一个
Number
。
→
分隔。因为其中一些类型可能
// someFunc :: ((Boolean, Number) -> String) -> (Object -> Boolean) ->
// (Object -> Number) -> Object -> String
Object
并返回一个
String
。的
Boolean
和
Number
并
String
。请注意,此处未将其描述为 curry
(Boolean → Number →
String)
。)第二个函数参数接受
Object
并返回
Boolean
,第三个接受
Object
并返回
Number
。
f ::
(A, B, C) → D
和
g = curry(f)
,则为
g(a)(b)(c) == g(a)(b, c) ==
g(a, b)(c) == g(a, b, c) == f(a, b, c)
。
map
,那么您会知道它非常灵活:
map(word => word.toUpperCase(), ['foo', 'bar', 'baz']); //=> ["FOO", "BAR", "BAZ"]
map(word => word.length, ['Four', 'score', 'and', 'seven']); //=> [4, 5, 3, 5]
map(n => n * n, [1, 2, 3, 4, 5]); //=> [1, 4, 9, 16, 25]
map(n => n % 2 === 0, [8, 6, 7, 5, 3, 0, 9]); //=> [true, true, false, false, false, true, false]
// map :: (String -> String) -> [String] -> [String]
// map :: (String -> Number) -> [String] -> [Number]
// map :: (Number -> Number) -> [Number] -> [Number]
// map :: (Number -> Boolean) -> [Number] -> [Boolean]
Number
,
String
和
Object
之类的类,但也包含
map
?这很简单。第一个参数是
// map :: (a -> b) -> [a] -> [b]
a
,
b
,
c
等。有时,如果有很强的理由,
k
和
v
表示
key
,
value
或
n
表示数字),但大多数情况下,我们只使用
b
,然后在其他地方重复使用
map(n => n * n, [1, 2, 3]); //=> [1, 4, 9]
是
(Number → Number) → [Number] → [Number]
,所以如果我们要匹配
(a → b) → [a] → [b]
,然后
a
和
b
都指向
Number
。
Box
。但是没有实例是
Box
;每个只能容纳一种物品。什么时候我们
Box
的
Box
。
// makeBox :: Number -> Number -> Number -> [a] -> Box a
const makeBox = curry((height, width, depth, items) => /* ... */);
// addItem :: a -> Box a -> Box a
const addItem = curry((item, box) => /* ... */);
Box
参数化的
a
的方式:
Box a
。可在需要类型,参数或参数的任何地方使用
Box Candy
或
Box Rock
。 (尽管这
Dictionary
类型
Dictionary k
v
。这也说明了我们可能会使用单个
User String
,其中
// toUrl :: User Name u => Url -> u -> Url
// Name = String
// Url = String
const toUrl = curry((base, user) => base +
user.name.toLowerCase().replace(/\W/g, '-'));
toUrl('http://example.com/users/', {name: 'Fred Flintstone', age: 24});
//=> 'http://example.com/users/fred-flintstone'
Name
和
Url
出现在“
=
”的左侧。其
Lens
es和
// Lens s a = Functor f => (a -> f a) -> s -> f s
Lens s a
代表什么,
Functor
f ⇒ (a → f a) → s → f s
的别名。
关于javascript - 在哪里可以找到用于解释功能编程的符号的解释/摘要,特别是Ramda.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40361059/
这个问题在这里已经有了答案: Different ways of loading a file as an InputStream (6 个答案) 关闭 8 年前。 在我的 gradle java
给定一个 User 类: class User end 我想使用 .class_eval 定义一个新常量.所以: User.class_eval { AVOCADO = 'fruit' } 如果我尝试
这可能听起来很奇怪,但我正在开发一个需要查找 div 内的元素或 div 本身的插件。 脚本根据用户选择查找元素,但内容(包括标记)是可变的。因此脚本将按如下方式查找元素: $('.block').f
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我需要在按我自己的函数排序的对的多集中查找并删除一个值。显然, .find 总是将迭代器返回到末尾,而不是返回到搜索到的值。有小费吗?这是函数: struct cmp { bool operato
求助!我将如何通过遍历查看字符并计算有效字符出现之前的下划线数量来查找和删除前导下划线。以及从字符串末尾向后迭代以查找任何尾随下划线。 我可以使用下面的方法来删除下划线,但是如何迭代才能找到下划线。
如果你在 $(xml) 中有下面的 xml,你会变得懒惰: $(xml).find("animal").find("dog").find("beagle").text() 在 jQuery 中是否有类
你如何找到4个文件的交集? 我用了grep -Fx -f 1.txt 2.txt 3.txt 4.txt ,但它似乎只适用于 2 个文件。同样comm -12 1.txt 2.txt无法扩展为 4 个
我已经完成了标记的姿势估计并获得了 rvec 和 tvec 值。我不知道如何找到它的中心,因为我需要绘制一个需要中心值的圆柱体。 我该怎么做? 最佳答案 标记的 tvec 是标记从原点的平移 (x,y
我有一个任务,我需要找到 2 个单链接(单对单)列表的交集。我还必须为 2 个双向链接(双重 vs 双重)列表执行此操作: 对于单链表,我使用 mergeSort() 对两个列表进行排序,然后逐项比较
我是 R 的新手,我有一个 100x100 的方阵。我想找到这个矩阵的最大特征值。我试过了 is.indefinite(x) 但是它写 is.indefinite(x) : argument x is
您好,我是 svg 和 JavaScript 的新手,当鼠标位于 svg 上方时,我试图使一些 svg 元素弹出(通过缩放),反之亦然,当鼠标离开 svg 元素时。 我已经能够通过使用转换使 svg
我正在尝试为 scala 项目编写一个类,但在多个地方使用 class、def、while 等关键字出现此错误。 它发生在这样的地方: var continue = true while (conti
我有两个 pandas 数据框,它们只取自一列并将日期列设置为索引,所以现在我有两个 Series。我需要找到这些系列的相关性。 这里有几行来自dfd: index change 2018-
我正在尝试调整我的 Vagrantfile,因此如果它丢失,它会自动在项目根目录中创建一个文件夹。创建文件夹没问题,但我无法找到创建该文件夹的位置。 我发现此信息可在 Vagrant::Environ
我正在尝试在 jquery 中找到 Test3 的位置,请有人引导我走上正确的道路。 我需要jquery来显示5 Test7 Test2 Test6 Test5 Test3 Test8 谢谢 最佳
大家早上好 我有一个像这样的图像列表: 使用 jQuery 如何查找 ul#preload 中包含特定字符串(例如“green”)的所有图像 src 类似... var new_src = j
我正在开发一个修改 Excel 文件的应用程序。 如何找到任意行中最后使用的单元格? 示例:行号 => 5 中最后使用的单元格 最佳答案 要找到一行中的最后一个单元格,您需要 Range 的 End
我刚刚陷入 react native ,需要一些帮助才能在找到 token 时导航到 protected 屏幕。我应该在哪里寻找应用程序加载时的 token ?如何在不多次调用导航的情况下导航用户一次
非常奇怪...此页面是 protected 内容还是我不知道的内容?我尝试单击下一页 anchor 。 参见this page first. 我试图用这个来抓取元素 var buttonNext =
我是一名优秀的程序员,十分优秀!