如何重构所需的 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 子句? 的相关文章

随机推荐

  • 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