热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

用字符串映射行为

如何解决《用字符串映射行为》经验,为你挑选了1个好方法。

鉴于map是:

map :: (a -> b) -> [a] -> [b]

为什么R.map(R.toUpper, 'hello')返回['H', 'E', 'L', 'L', 'O']而不是"HELLO"

例如,在haskell中,字符串是一个字符列表,因此map toUpper "hello"其行为符合预期(HELLO)。

Ramda不map应该这样做吗?


这可能是一种设计选择,但我认为Ramda的地图可能违反了函子定律: 如果将id函数映射到函子上,我们就不会取回原始函子

map :: (a -> b) -> [a] -> [b]
console.log(
  R.map(R.identity, 'Hello World'),
);

我为什么不期望map表现得更像:

const map = (fn, string) => string.replace(/./g, fn);


console.log(
  map(R.toUpper, 'hello world'),
);

Scott Sauyet.. 7

就像评论所说,Strings不是functors。函子法要求

map :: Functor f => (a -> b) -> f a -> f b

也就是说,对于持有一个或多个类型的项a和一个函数从一个类型a到另一个类型b的函子,它将返回持有一个或多个类型的项的相同类型的函子b。字符串无法做到这一点,因为它仅包含字符。例如,您希望map(_ => 1.234, "hello")返回什么?

Ramda在Strings上的行为不是故意的。正如Bergi所建议的那样,它根本无法实现。字符串看起来足够像数组(具有整数length属性和整数索引的子元素),因此代码将它们视为数组一样对待。

Ramda一直希望成为一个低级库,而创始人对编写手持代码并不特别感兴趣。如果您提供所需的类型,它应该可以像宣传的那样工作,但是如果您不提供,则几乎没有保证。但是,如果您对此有强烈的感觉,请随时向Ramda团队提出有关此问题的信息,或者甚至更好地针对您希望的行为提出拉式请求。它可能不会被接受,但是会得到公平的听证。



1> Scott Sauyet..:

就像评论所说,Strings不是functors。函子法要求

map :: Functor f => (a -> b) -> f a -> f b

也就是说,对于持有一个或多个类型的项a和一个函数从一个类型a到另一个类型b的函子,它将返回持有一个或多个类型的项的相同类型的函子b。字符串无法做到这一点,因为它仅包含字符。例如,您希望map(_ => 1.234, "hello")返回什么?

Ramda在Strings上的行为不是故意的。正如Bergi所建议的那样,它根本无法实现。字符串看起来足够像数组(具有整数length属性和整数索引的子元素),因此代码将它们视为数组一样对待。

Ramda一直希望成为一个低级库,而创始人对编写手持代码并不特别感兴趣。如果您提供所需的类型,它应该可以像宣传的那样工作,但是如果您不提供,则几乎没有保证。但是,如果您对此有强烈的感觉,请随时向Ramda团队提出有关此问题的信息,或者甚至更好地针对您希望的行为提出拉式请求。它可能不会被接受,但是会得到公平的听证。


推荐阅读
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 查询单个functionquery(id){$.ajax({url:smallproductServlet,async:true,type:POST,data:{typ ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
author-avatar
wwhh47123_829
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有