cme*_*ren 4 f# functional-programming
我有一系列'arg -> 'entity -> 'entity
更新不可变实体的功能。
我有一系列相应的'arg option
参数,如果参数是Some
,则应调用相应的update函数。
我目前已经这样实现:
// General utility function
// ('a -> 'b -> 'b) -> 'a option -> 'b -> 'b
let ifSome f argOpt entity =
match argOpt with
| Some arg -> f arg entity
| None -> entity
// Function that accepts several option parameters
// (callbackUrl and authHeader are wrapped in option)
let updateWebhook callbackUrl authHeader webhook =
webhook
|> ifSome Webhook.setCallbackUrl callbackUrl
|> ifSome Webhook.setAuthHeader authHeader
Run Code Online (Sandbox Code Playgroud)
我喜欢它的简单性,但是就像我自己开发的函数解决方案一样(特别是当泛型函数比我想出的参数名更通用时),我感觉这只是一个特例一个更通用的功能概念-我可以使用一些现有的抽象来执行相同的任务。因此,我想知道:
这仅仅是Option.fold
(或者在这种情况下更准确地说Option.foldBack
)。褶皱通常被称为变形。
let updateWebhook callbackUrl authHeader webhook =
webhook
|> Option.foldBack Webhook.setCallbackUrl callbackUrl
|> Option.foldBack Webhook.setAuthHeader authHeader
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50 次 |
最近记录: |