- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(真的很难给这个问题起标题,所以如果有人有任何建议,请随意。)
假设我想做这样的操作:
我可以使用链接在下划线中非常干净地完成此操作,如下所示:
arr = [1,2,3]
map = (el) -> 2*el
reduce = (s,n) -> s+n
out = (r) -> 10*r
reduced = _.chain(arr).map(map).reduce(reduce).value()
result = out(reduced)
但是,如果我也可以像这样链接“out”方法,那就更好了:
result = _.chain(arr).map(map).reduce(reduce).out(out).value()
现在这将是对像 underscore 这样的库的一个相当简单的添加。但我的问题是:
tap
接近,但不完全)。最佳答案
这个问题让我非常着迷。这是我的一些想法。
感觉在“chain() 模式”下使用 underscore.js 会脱离函数式编程范式。基本上,您不是在函数上调用函数,而是以 OOP 方式调用包装器对象实例的方法。
我正在使用 underscore's chain()我自己在这里和那里,但这个问题让我思考。如果简单地创建更有意义的函数然后可以在序列中调用而根本不必使用 chain() 会更好吗?您的示例将如下所示:
arr = [1,2,3]
double = (arr) -> _.map(arr, (el) -> 2 * el)
sum = (arr) -> _.reduce(arr, (s, n) -> s + n)
out = (r) -> 10 * r
result = out sum double arr
# probably a less ambiguous way to do it would be
result = out(sum(double arr))
看看真正的函数式编程语言(比如......比 JavaScript 更实用),似乎你可以用更简单的方式做完全相同的事情。这是用标准 ML 编写的同一个程序。请注意仅使用一个参数调用 map 如何返回另一个函数。无需像我们在 JavaScript 中那样将此映射包装在另一个函数中。
val arr = [1,2,3];
val double = map (fn x => 2*x);
val sum = foldl (fn (a,b) => a+b) 0;
val out = fn r => 10*r;
val result = out(sum(double arr))
标准 ML 还允许您创建运算符,这意味着我们可以制作一个小的“链式”运算符,用于以更直观的顺序调用这些函数。
infix 1 |>;
fun x |> f = f x;
val result = arr |> double |> sum |> out
我还认为这个 underscore.js 链接与函数式编程中的 monads 类似,但我对这些了解不多。不过,我觉得这种数据操作管道不是您通常会使用 monad 的东西。
如果我在上述任何一点上有错误,我希望有更多函数式编程经验的人可以插话并纠正我。
更新
稍微偏离主题,但创建部分函数的一种方法可能如下:
// extend underscore with partialr function
_.mixin({
partialr: function (fn, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function () {
return fn.apply(context, Array.prototype.slice.call(arguments).concat(args));
};
}
});
此函数现在可用于从任何下划线函数创建部分函数,因为它们中的大多数都将输入数据作为第一个参数。例如,现在可以像这样创建 sum 函数
var sum = _.partialr(_.reduce, this, function (s, n) { return s + n; });
sum([1,2,3]);
不过我还是更喜欢 arr |> double |> sum |> out out(sum(double(arr)))。 Underscore 的 chain() 很好,因为它以更自然的顺序读取。
关于functional-programming - 在 underscore.js 中链接操作(如 map reduce)时,是否有提供最终转换方法的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908901/
我正在尝试从一个 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 m
我是 Haskell 的新手,我认为函数 map map和 map.map在 Haskell 中是一样的。 我的终端给了我两种不同的类型, (map.map) :: (a -> b) -> [[a]
我的目标是创建一个 map 的 map ,这样我就可以通过它的键检索外部 map 的信息,然后通过它们的键访问它的“内部” map 。 但是,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我
如何使用 Java8 编写以下代码? for (Entry> entry : data.entrySet()) { Map value = entry.getValue(); if (valu
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。 我
所以我有 2 std::map s >一个是“旧的”,一个是“新的”,我想知道哪些文件被删除了,这样就能够遍历差异并对 shared_ptr 做一些事情。这样的事情可能吗?如何做到? 最佳答案 虽然
是否可以将当前查看的 google.maps.Map 转换为静态图像链接,以便我可以获取图像并将其嵌入到 PDF 中? 我在 map 上添加了一些带有自定义图标的标记,所以我不确定这是否真的可行。 如
你能帮我吗 Java Streams ? 从标题可以看出我需要合并List>>进入Map> . 列表表示为List>>看起来像: [ { "USER_1":{
对于 idAndTags 的第二个条目,内部映射被打乱,但第一个条目则不然 第一次接近! for (Map.Entry> entryOne : idAndTags.entrySet()) {
我将从我的代码开始,因为它应该更容易理解我想要做什么: @function get-color($color, $lightness) { @return map-get(map-get($col
我过去曾在许多网站上使用过 Google map ,但遇到了以前从未遇到过的问题。 map 窗口正在显示,但它只显示左上角的 map 片段,以及之后的任何内容(即使我在周围导航时),右侧也不会加载任何
众所周知,这些 map ,无论是常规街道 map 还是卫星 map ,在中国的特定地区都无法正确排列。那么哪个 map 排列正确,是卫星 map 还是默认街道 map ?一些网站表明卫星 map 是正
在拖尾事件之后,我面临着获取此处 map 中的 map 边界的问题。我需要新的经纬度来在新更改的视口(viewport)中获取一些项目/点。我只是想在拖动结束时获得谷歌地图map.getBounds(
我想做的是通过 ajax API 显示以英国邮政编码为中心的小型 bing 生成 map 。我相信这是可能的;我在 Bing map 文档中找不到如何将英国邮政编码转换为可以插入 map Ajax 控
我有一个 List我想转换成的 e Map>其中外部字符串应为“Name”,内部字符串应为“Domain”。 Name Id Domain e(0) - Emp1, 1, Insuran
我的第 2 部分:https://stackoverflow.com/questions/21780627/c-map-of-maps-typedef-doubts-queries 然后我继续创建 I
是否可以在 1 行中使用 Java8 编写以下所有 null 和空字符串检查? Map> data = new HashMap<>(holdings.rowMap()); Set>> entrySet
我正在审查一个项目的旧代码,并使用 Map 的 Map 的 Map 获得了如下数据结构(3 层 map ): // data structure Map>>> tagTree
这可能是一种不好的做法,但我还没有找到更好的解决方案来解决我的问题。所以我有这张 map // Map>> private Map>> properties; 我想初始化它,这样我就不会得到 Null
我们在 JDK 1.7 中使用 HashMap,我在使用 SonarQube 进行代码审查时遇到了一些问题。 请考虑以下示例: public class SerializationTest imple
我是一名优秀的程序员,十分优秀!