Play Framework Form“折叠”方法命名原理

2024-04-08

Play 框架 (2.x)表格类 http://www.playframework.com/documentation/2.0/api/scala/index.html#play.api.data.Form有一个方法叫做foldwho 的用法表示为:

anyForm.bindFromRequest().fold(
  f => redisplayForm(f),
  t => handleValidFormSubmission(t)
)

本质上,第一个函数参数是绑定失败时执行的函数,第二个函数参数是绑定成功时执行的函数。对我来说,它似乎类似于 jquery 的 ajax 函数的“成功”和“错误”回调。

我的问题是为什么 Play 开发者将该方法称为“fold”?作为免责声明,我是 Scala 新手,但我看不到它与函数式 Scala 之间的联系fold手术。唯一的相似之处在于它是一个高阶函数;但我没有看到任何组合正在发生,也没有在其实现中内部委托给任何 Scala 折叠函数。


我不是 FP 专家,但我的理解是fold一般来说,将一种类型的内容完全转换为另一种类型,并尊重原始类型的递归结构(如果适用)。您通常为原始类型的每种情况提供相同类型的结果。

List是最熟悉的。我一直想到fold基本上是一个带有累加器的 for 循环,但您也可以将其视为两种情况,一种是Nil案例和一个Cons案件。因为实际类型List是递归的,所以它的必然是fold.

Scala 标准库定义了fold on Option以及签名fold[B](ifEmpty: ⇒ B)(f: (A) ⇒ B): B。在这种情况下,由于类型不是递归的,因此fold实际上只是针对两种情况的两个函数。

你的情况非常类似于Option。该类型不是递归的,所以fold基本上归结为将其状态的所有情况映射到一种输出类型。

请注意fold不同于map and flatMap因为后两者保留了原始类型,但改变了其内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play Framework Form“折叠”方法命名原理 的相关文章

随机推荐

  • 如何摆脱 NSLog 中的所有这些垃圾?

    当我使用 NSLog fooBar 它打印出很多我不想要的东西 2009 09 03 13 46 34 531 MyApp 3703 20b fooBar 有没有办法在没有这个大前缀的情况下将某些内容打印到控制台 我想在控制台中绘制一张桌子
  • 在 Eclipse 中的两个独立设备上运行调试

    我有 2 台 Android 设备连接到我的电脑 我需要同时调试它们 因为我在它们之间来回发送数据 当我将它们都设置为调试模式时 它一次只会停止一个 我无法在发送后立即停止 发送者 然后调试 接收者 它只是不喜欢而已 我真的需要能够运行两个
  • 没有错误:未调用 PDO 构造函数

    下午好 我昨天开始使用 PDO 但遇到了一些问题 我正在创建扩展类 它不起作用 而且我找不到错误 这是我的助手类的代码 用于工作女巫 PDO class EPDO extends PDO Some identificator of conn
  • 如何在 Javascript 的脚本元素中添加局部变量和不同的函数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要创建一个脚本元素 如下所示 div class abcd div 我尝试通过首先通过 document Createelement 选
  • 如何查找特定

    环境 美丽的汤4 Python 2 7 5 Logic 找到所有 li 内的实例 ul 与一类my class eg ul class my class li thing one li li thing two li ul 澄清 只需获取之
  • Flutter - 自动调整 AlertDialog 大小以适合列表内容

    我需要从休息网络服务动态加载列表城市 并让用户从警报对话框中选择一个城市 我的代码 createDialog fetchCities then response showDialog context context builder Buil
  • VSCode 显示文件夹 /run/user/1000/doc 中路径的问题

    我最近在更新到 v1 77 3 后在 VSCode 中遇到了一个问题 新项目的路径是错误的 而旧项目的路径是正确的 特别是 新项目在前缀为的文件夹中打开 run user 100 doc 接下来是类似于 sha256 的摘要 每个文件夹都不
  • \ 对非转义字符有何作用?

    I 又问了一个不好的问题 https stackoverflow com questions 4380386 fix escape javascript escape character所以我会问别的事情 根据http www c poin
  • 存储值以便在以后的函数中使用的最佳方法是什么?我听说全局变量很邪恶

    所以我使用的代码位于http jsfiddle net 8j947 10 http jsfiddle net 8j947 10 它为变量 isLive 返回 true 或 false 值 如何在稍后的函数中使用变量 onLive 我在以下位
  • 使用Jackson写yaml?

    我正在使用 Jackson 来读取和修改 yaml 文件 效果很好 不过 我找不到编写 yaml 所需的魔法 ObjectMapper mapper new ObjectMapper new YAMLFactory ObjectNode r
  • 使用 docker-compose 时如何为 mongodb 镜像添加 --auth ?

    我正在使用 docker compose 来运行由 node mongodb nginx 创建的项目 我已经使用构建了该项目docker build 然后我用docker up d nginx开始我的项目 但我还没有找到使用 auth 运行
  • 我应该在 Common Lisp 中使用哪些正则表达式库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python 列表索引效率

    关于内置 python 列表对象的快速问题 假设您有一个包含数字 0 99 的列表 您正在编写一个程序 该程序获取列表中的最后一项并将其用于其他目的 使用list 1 比使用list 99 更有效吗 换句话说 无论哪种情况 python 都
  • Python-从另一个列表中删除一组列表

    array1 1 2 3 4 5 6 7 8 9 array2 1 2 2 2 5 6 6 6 9 temp set array2 array1 remove temp Traceback most recent call last Fil
  • JqG​​rid 搜索字段的多个文本框

    我想知道 JqGrid 高级搜索是否可以为我想要搜索的某些字段显示多个文本框 例如 如果我有一个 电话号码 字段 我希望能够可视化 2 个框 一个用于区号 另一个用于电话号码的其余部分 然后按 查找 后 我希望能够获取两个值并将它们合并或执
  • 将事件分配给事件处理程序的两种不同类型之间的区别

    我在 SO 中看到了这个示例代码 它说一种做法不好 另一种做法很好 但我不明白为什么 事实上 我收到了著名的 RCW COM 对象错误 该帖子说这可能是一个原因 public class SomeClass private Interop
  • 如何在单击项目时检查ListView的复选框?

    如何在单击项目时检查ListView的复选框 我有一个带有复选框 文本视图 按钮的列表视图 这里我想选择ListView的多行 所以使用了CheckBox 如果我点击一行 我想让它对应的CheckBox被选中并获取ListView中被点击项
  • 每个Android的location.Address方法返回什么?

    我试图弄清楚如何使用 Android SDK 和 android location Address 类获取地址组件 有些方法非常简单 其他方法很容易通过示例中的示例来理解文档 http developer android com refer
  • .Net Core - CS0012“对象”在未引用的程序集中定义

    我是 Net Core 的新手 我正在尝试基于它构建一个构建系统 作为该项目的一部分 我创建了一个抽象类 它详细说明了构建任务应实现的内容 并将其填充到共享库中 可执行项目引用该库并扫描项目目录以查找特殊命名的目录 然后检查是否有任何 cs
  • Play Framework Form“折叠”方法命名原理

    Play 框架 2 x 表格类 http www playframework com documentation 2 0 api scala index html play api data Form有一个方法叫做foldwho 的用法表示