redispl-6ren">
gpt4 book ai didi

scala - Play Framework Form "fold"方法命名原理

转载 作者:行者123 更新时间:2023-12-01 05:11:59 25 4
gpt4 key购买 nike

Play Framework (2.x) Form class有一个名为 fold 的方法谁的用法表示为:

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

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

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

最佳答案

我不是 FP 专家,但据我了解,fold ,一般来说,将一个类型的内容完全转换为另一种类型,如果适用的话,尊重原始类型的递归结构。您通常为原始类型的每个案例提供相同类型的结果。
List是最熟悉的。我一直在想fold基本上是带有累加器的 for 循环,但您也可以将其视为两种情况,一种用于 Nil一个用于 Cons案子。因为实际类型List是递归的,所以必须是它的fold .

Scala 标准库定义 foldOption同样,带有签名fold[B](ifEmpty: ⇒ B)(f: (A) ⇒ B): B .在这种情况下,由于类型不是递归的,fold真的只是两种情况下的两种功能。

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

请注意 fold不同于 mapflatMap因为后两者保留了原始类型,但改变了它的内容。

关于scala - Play Framework Form "fold"方法命名原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com