Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 给出了几个选项<';a>;值,是否存在链接多个';a->';b->';b功能?_Functional Programming_F# - Fatal编程技术网

Functional programming 给出了几个选项<';a>;值,是否存在链接多个';a->';b->';b功能?

Functional programming 给出了几个选项<';a>;值,是否存在链接多个';a->';b->';b功能?,functional-programming,f#,Functional Programming,F#,我有一系列函数来更新一个不可变的实体 我有一系列相应的'arg选项参数,如果参数是Some,我应该调用相应的更新函数 我目前的实施方式如下: // General utility function // ('a -> 'b -> 'b) -> 'a option -> 'b -> 'b let ifSome f argOpt entity = match argOpt with | Some arg -> f arg entity | None -

我有一系列函数来更新一个不可变的实体

我有一系列相应的
'arg选项
参数,如果参数是
Some
,我应该调用相应的更新函数

我目前的实施方式如下:

// 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
我喜欢它有多简单,但我自己开发的函数解决方案通常都是这样(特别是当泛型函数比我提出的参数名称更泛型时),我觉得这只是一个更一般的函数概念的特例——我可以使用一些现有的抽象来执行相同的任务。因此,我想知道:

  • 这是公认的功能模式吗?如果有,它有名字吗?我能在什么地方读到更多关于它的信息吗
  • 如果没有,是否有一个(希望同样简单)的替代方案可以使用“众所周知的”功能抽象/模式来实现同样的功能
    • 这只是(或者更准确地说是在这种情况下)。褶皱通常被称为变形

      let updateWebhook callbackUrl authHeader webhook =
         webhook
         |> Option.foldBack Webhook.setCallbackUrl callbackUrl
         |> Option.foldBack Webhook.setAuthHeader authHeader
      

      那么,@Lee,在选项的情况下,
      fold
      foldBack
      之间有什么区别?我知道列表是折叠的方向(左对右)。但是它对选项有什么不同呢?@melston-它实际上没有什么不同,因为一个选项中只有1或0项,但是参数的顺序在
      fold
      vs
      foldBack
      选项。fold
      ('State->'t->'State)中是不同的->“状态->“T选项->”状态
      选项。折叠式
      ('T->“状态->”状态)->“T选项->”状态
      。这些镜像了
      List.fold
      List.foldBack
      的类型。谢谢,@Lee。这是有道理的。我想我是被这个名字吓了一跳,因为在F#之前我见过的大多数语言都使用
      foldLeft
      foldRight
      (文件夹函数的参数顺序颠倒)。我看到了
      foldBack
      ,想知道是否还有其他事情发生。