如何重构所需的 else 子句?

2023-11-26

我有一个 C# 方法,看起来有点像这样:

bool Eval() {
  // do some work
  if (conditionA) {
     // do some work
     if (conditionB) {
       // do some work
       if (conditionC) {
         // do some work
         return true;
       }
     }
  }
  return false;
}

在 F# 中,由于强制的 else 分支,这最终看起来有点难看:

let eval() =
  // do some work
  if conditionA then
    // do some work
    if conditionB then
      // do some work
      if conditionC then
        // do some work
        true
      else
        false
    else
      false
  else
    false

在 F# 中编写此代码的更简洁的方式是什么?


module Condition =
  type ConditionBuilder() =
    member x.Bind(v, f) = if v then f() else false
    member x.Return(v) = v
  let condition = ConditionBuilder()

open Condition

let eval() =
  condition {
    // do some work
    do! conditionA
    // do some work
    do! conditionB
    // do some work
    do! conditionC
    return true
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重构所需的 else 子句? 的相关文章

  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 代码块 power 函数在 c 中不起作用

    我正在使用代码块来学习c 我的代码是 include
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • 捕获另一个进程未处理的异常

    我想知道我是否可以捕获我开始使用 Process Start 的另一个进程抛出的未处理的异常 我知道我可以用这个捕获标准错误link http social msdn microsoft com Forums en US csharpgen
  • 使用部分函数短路列表映射

    因此 我创建了一个名为 tryMap 的函数 如下所示 tryMap with failure and success continuations let rec tryMapC R gt U list gt R gt T gt U opt
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • 使用宏计算源文件行数?

    是否可以使用 C C 预处理器将源文件中的行数计算为宏或某种编译时可用值 例如 我可以更换吗MAGIC1 MAGIC2 and MAGIC3在下面 并在使用时以某种方式获取值 4MAGIC3 MAGIC1 can be placed whe
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix

随机推荐

  • Eclipse - 调试器不会在断点处停止

    我正在尝试对 JUnit 进行故障排除 在源代码中 我在两个位置设置了断点 1 在初始化静态成员的行中2 其中一个测试用例的第一行 调试器在静态字段初始化行停止 但它并不止于测试用例 无论我在测试用例中的何处设置断点 调试器都不会在那里停止
  • Django 表单总是显示错误“此字段为必填字段”

    当我渲染表单时 django 总是在每个字段上显示错误消息 此字段是必需的 即使没有提交表格 可能是什么问题呢 这是我的模型表格 class MMEditidStateForm forms ModelForm class Meta mode
  • 生成器与列表理解

    我有一些东西 当作为列表理解运行时 运行良好 看起来像 myClass Function things for things in biggerThing Function是一个方法 它构建一个列表 该方法本身不返回任何内容 但会在其中对列
  • QR 分解求解 CUDA 中的线性系统

    我正在GPU上写一个图像恢复算法 详细信息在 Cuda 最小二乘求解 速度较差 求解线性系统的QR分解法 Ax b 工作原理如下 min Ax b gt QRx b gt Q T QRx Q T b gt Rx Q T b where R是
  • 接口中的 C# 数据注释

    快速提问 如果我在界面中添加注释 说 必填 我可以在属性的 C 类中省略该符号吗 即我可以 interface IFoo Required string Bar get set class Foo IFoo string Bar get s
  • 导入 HoloEverywhere 时出错

    首先 我是 Android 新手 我正在做一个应用程序 并且正在实现一个名为的库无处不在的全息 这个库在themes xml 中使用ActionBar Sherlock 库 我已将 ActionBar Sherlock 导入到我的工作区 并
  • eclipse 在 ubuntu 14.04 上崩溃

    我在 ubuntu 13 10 上使用了 google android ide adt eclipse 它很好 当我升级 ubuntu 14 04 时 当 eclipse 崩溃时 它会提示方法等 日志如下 谁能帮我 谢谢 A fatal e
  • EF4可以支持批量更新吗?

    实体框架 v4 是否支持批量更新 插入 因此它可以一次性向数据库发送 gt 1 个命令 而不是向数据库发送 gt 1 个命令 Thanks 我不相信这已经改变了 您有以下选择 存储过程 像这篇文章这样的东西 使用 T Sql 之类的在这个问
  • pytorch模型总结——forward func有多个参数

    我正在使用火炬摘要 from torchsummary import summary 我想在打印模型摘要时传递多个参数 但这里提到的示例 pytorch中的模型总结只采取了一个论点 例如 model Network to device su
  • 即使元素的值也在 CSS 中设置,也能获取内联样式值吗?

    如果你有以下元素 span style width 100px span CSS 是 span width 50px important 有没有办法获取内联样式值并忽略 css 值 Thanks use element style widt
  • 使用 apache 和 mod_wsgi 的 Flask hello world 仅显示 webroot 中的文件

    我正在尝试使用 wsgi 从 Flask 站点通过 apache2 运行基本的 hello py 我的代码如下所示 var www flask dev hello py from flask import Flask app Flask n
  • 在哪里可以找到 PythonMagick 文档?

    我似乎无法在任何地方找到 PythonMagick ImageMagick 的绑定 文档 即使下载也没有 docs 文件夹 请问链接 我认为它不再活跃了 看这里
  • py2exe - 生成单个可执行文件

    我以为我听到了py2exe能够做到这一点 但我从未弄清楚 有人成功做到这一点吗 我可以查看您的 setup py 文件以及您使用的命令行选项吗 基本上我想它给我一个可执行文件 它可以执行诸如将自身解压缩到 temp 并运行之类的操作 使用
  • 如何设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量?

    我认为有三个按钮 在 viewDidLoad 中设置cornerRadus后 button layer cornerRadius 20我在日志中收到以下错误消息
  • 在 Spring Boot 启动器中覆盖 log4j2 版本

    我们正在尝试构建一个 Springboot 启动器 它将以编程方式创建 log4j2 配置 因此开发人员不必费心创建 log4j2 xml 文件 问题在于 log4j2 编程 API 随版本的不同而变化 我们已经使用 log4j2 2 5
  • 如何按 MultiIndex 和值对 Pandas DataFrame 进行排序?

    样本数据 mdf pd DataFrame 1 2 50 1 2 20 1 5 10 2 8 80 2 5 65 2 8 10 columns src dst n mdf src dst n 0 1 2 50 1 1 2 20 2 1 5
  • 多个 NSPercientStoreCoordinator 实例可以连接到同一个底层 SQLite 持久存储吗?

    我读过的关于在多线程上使用 Core Data 的所有内容都谈到了使用多个线程NSManagedObjectContext实例共享一个NSPersistentStoreCoordinator 这是可以理解的 我已经让它在一个应用程序中工作
  • 创建类似于 Android 版 facebook 应用程序的登录布局

    我想制作一个具有类似于 Facebook 应用程序的登录活动 布局的应用程序 我的意思是 当文本字段聚焦时 软键盘会将整个视图向上推 但不会挤压徽标 我努力了android windowSoftInputMode adjustPan adj
  • IE8和localStorage支持[重复]

    这个问题在这里已经有答案了 我不确定IE8是否完全支持localStorage 但我用下面的方法来检测 function supports html5 storage try return localStorage in window wi
  • 如何重构所需的 else 子句?

    我有一个 C 方法 看起来有点像这样 bool Eval do some work if conditionA do some work if conditionB do some work if conditionC do some wo