首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

F# / Argu -如何显示两级命令树的帮助而不抛出异常

F#是一种函数式编程语言,它结合了函数式编程和面向对象编程的特性。它是.NET平台上的一种语言,可以在各种环境中进行开发,包括前端开发、后端开发、移动开发等。

Argu是F#的一个命令行参数解析库,它提供了一种简单而灵活的方式来解析和处理命令行参数。它可以帮助开发人员定义和解析命令行参数,并生成帮助文档。

要显示两级命令树的帮助而不抛出异常,可以按照以下步骤进行操作:

  1. 引入Argu库:在F#项目中,首先需要引入Argu库。可以使用包管理工具如NuGet来安装Argu库。
  2. 定义命令行参数类型:使用Argu库,可以定义一个F#类型来表示命令行参数。可以使用记录类型或活动模式来定义参数类型,并为每个参数添加属性来指定其名称、类型、默认值等。
  3. 解析命令行参数:使用Argu库提供的函数,可以解析命令行参数并将其映射到定义的参数类型上。可以使用Argu.ArgParser.Parse函数来解析参数。
  4. 显示帮助文档:使用Argu库提供的函数,可以生成帮助文档并将其显示给用户。可以使用Argu.ArgParser.FormatUsage函数来生成帮助文档的字符串表示。

以下是一个示例代码,演示如何使用Argu库来显示两级命令树的帮助:

代码语言:txt
复制
open Argu

type Command =
    | Level1 of string
    | Level2 of string

let parseArgs args =
    let parser = new ArgParser<Command>()
    parser.Parse(args)

let displayHelp() =
    let parser = new ArgParser<Command>()
    printfn "%s" (parser.FormatUsage())

[<EntryPoint>]
let main args =
    try
        let command = parseArgs args
        match command with
        | Level1 param ->
            // 处理一级命令
            printfn "Level 1 command: %s" param
        | Level2 param ->
            // 处理二级命令
            printfn "Level 2 command: %s" param
    with
    | :? ArgParserException as ex ->
        // 显示帮助文档
        displayHelp()
        printfn "Error: %s" ex.Message
        1 // 返回错误码
    | _ ->
        0 // 返回成功码

在上述示例中,我们定义了一个Command类型,表示两级命令树的命令。然后,我们使用ArgParser<Command>来解析命令行参数,并根据解析结果执行相应的逻辑。如果解析过程中发生异常,我们会显示帮助文档并返回错误码。

这只是一个简单的示例,你可以根据实际需求进行扩展和修改。关于Argu库的更多信息和使用方法,你可以参考腾讯云的F# / Argu文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性

本文我们主要来体验最小Web API的功能和特性。最小Web API的目的主要是帮助C#(或者F#)后端开发者快速创建微服务项目或者HTTP API服务。...; app.Run(); 为了不启用https,我们修改一下位于Properties目录中的launchSettings.json配置文件,修改后如下: { "iisSettings": {...在Visual Studio 2022中,按F5运行,如果在浏览中打开并显示如下页面,说明最小API项目运行正常,如图: 在最小API项目中,直接调用WebApplication.MapGet()方法即可完成路由的注册和映射...; /// /// 抛出异常测试 /// app.MapGet("/throw", () => { throw new Exception("Exception...; /// /// 抛出异常测试 /// app.MapGet("/throw", () => { throw new Exception("Exception

5.2K30

DotNet 资源大全中文版(Awesome最新版)

它还提供了大量可选功能,如参数验证,自动生成的使用,选项卡完成以及大量可扩展性 Argu - F#应用程序的声明式CLI参数和XML配置解析器。...Appccelerate - Command Line Parser -具有流畅定义语法,不同参数类型,必需和可选参数,值限制,别名,类型转换和半自动使用帮助消息组合的命令行解析器 Colorful.Console...- 编译C#代码,首先使用简单的过程代码重写LINQ表达式的语法树,最大限度地减少分配和动态调度。...大部分复杂性都隐藏在库中,您可以专注于编写对您很重要的代码,而不是调试消息代码。 任何分布式应用程序的基础. FsShelter - 用于创建Apache Storm组件和拓扑的F#库。...Humanizer - Humanizer满足您操作和显示字符串,枚举,日期,时间,时间戳,数量和数量的所有.NET需求 LINQPad - 一个C#/ VB / F#暂存器,可立即执行任何表达式,语句块或程序

16.4K82
  • Visual Studio 2017 15.8 版发行说明

    此堆栈数据和对象类型及大小信息一同进行分析,以显示应用程序的内存活动详情。 你可以快速确定代码中的分配模式并识别异常。...性能分析(CPU 使用情况) 此版本对性能探查器的 CPU 使用情况工具做出了以下改进(可通过 ALT-F2 获得): 默认情况下,“调用树”视图现按逻辑调用堆栈显示异步执行。...在 CPU 使用情况主视图中选择函数时,可从上下文菜单中显示“模块/函数”视图,也可以从“调用树”或“调用方/被调用方”视图的“查看”下拉列表中显示“模块/函数”视图。...枚举用例以公共形式发出 现在 F# 4.5 在所有情况下以公共形式发出枚举用例,以与 C# 发出枚举用例的方式保持一致。 这也更便于分析工具分析来自 F# 代码的日志,其中发出的是值而不是标签名称。...(图 7)CMake 的配置模板 C++ 生产力 下面是针对 C++ 生产力的增强功能和改进功能: 有关宏的 C++ 快速信息工具提示现在显示它们的扩展功能,而不仅仅是其定义。

    8.2K10

    Linux三剑客(grep、sed、awk)

    我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!...现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。...-w 匹配整个单词 -E 使用ERE,相当于egrep -F 相当于fgrep,不支持正则表达式 举例子: 1、查找文件内容包含root的行数 2、查找文件内容不包含root的行 3、查找以s开头的行...举例子: 1、打印出文件第二行 2、打印出2-5行的内容 3、将文件中的root全部替换为abc 直接修改读取的文件内容,而不是输出到终端。...~:是否不匹配 逻辑操作符:与&&,或||,非! 函数调用:function_name(argu1, argu2, ...) 条件表达式(三目表达式):selector?

    2.1K11

    ClassNotFoundException: Class not found in the specified classpath完美解决方法

    在这篇文章中,我将深入探讨如何有效地处理ClassNotFoundException,并提供代码示例以帮助你更好地理解和解决这个问题。...引言 ClassNotFoundException 是Java中常见的异常之一,通常在程序尝试加载一个类却无法找到它时抛出。这个问题的根本原因在于Java的类加载机制。...❓ ClassNotFoundException 是一种受检异常,当Java应用程序在运行时无法找到指定的类时,会抛出此异常。这通常发生在以下几种情况下: 类名错误:拼写错误或大小写不正确。...常见问题解答 Q1: 为什么在IDE中运行没有问题,但在命令行中运行时抛出ClassNotFoundException? A1: 这通常是因为IDE自动管理了类路径,而命令行需要手动指定类路径。...在Maven中,可以使用mvn dependency:tree命令来查看依赖树,确保所有依赖都已加载。

    9410

    LLVM异常实现五 总结回顾

    整个异常处理的过程中,涉及到各种层级之间相互调用,同时还有一些函数还会负责处理不同的功能(比如说personality会同时处理search以及clean),这都导致了整个过程相对复杂,因此在这里选择将异常抛出的整个过程再次用文字整理一遍...,省略去庞大的代码细节的同时相对轻易的看到了整个过程是如何运转,都做了哪些事情,利于我们的理解。...首先一般的异常实现是由两级组成,一级由语言相关的abi,personality,以及语言相关的exception table(language specificatio data area)组成,用于实际在编译的过程中插入到代码以及生成产物中...执行函数体 执行到抛出异常的位置调用 __cxa_throw _Unwind_RaiseException getcontext 保存当前的寄存器到context中 unwind_phase1 # search..._cxa_begin_catch 减少未处理对象计数 更新对象的信息 将对象push到栈上 如果对象的类型匹配那么就处理,如果不匹配继续找下一个,直到找到并且处理,最后进行__cxa_end_catch

    11710

    TSINGSEE智慧港口可视化智能监管解决方案,助力港口码头高效监管

    港口作为货物、集装箱堆放及中转机构,具有昼夜不歇、天气多变、环境恶劣等特性,安全保卫工作显得更加重要。在如此异常繁复的环境中,如何保证运输生产和货物安全,成为港口码头管理人员最为关注的问题。...,同时通过系统提供的API接口与港口综合监管及应急指挥平台对接,在电脑端、大屏端、手机端显示及播放,作为实时监测港口所有点位的综合管理平台。...2、网络传输传输网络包括前端-码头-港口的两级架构视频专网。存储架构包括码头云服务-港口标准云两级云存储架构。显控系统包括港口-码头各级指挥中心的显示控制系统。...平台包括港口-码头两级平台管理架构,各级平台根据各自的权限级别进行系统管理和应急指挥。...3、视频监控通过港口视频综合管理系统,对库房、消防设施等进行可视化巡检监测,对限制区域实施24小时实时动态昼夜监控,可对故障点位、安全隐患点位等异常情况进行实时告警、快速显示,支持智能化调取异常点位周边监控视频

    55720

    会用python把linux命令写一遍的人,进大厂有多容易?

    的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力呢?...2. usage: 显示这个命令用法, 一般用来显示参数的用法 3. description:显示这个命令的帮助信息 4. epilog: 显示命令的帮助信息,位置在参数的下面 argparse.ArgumentParser.add_argument..., help='是否显示隐藏文件') parser.add_argument('-d', '--directory', help='指定显示的目录,如果不指定,默认为当前目录') parser.add_argument...# 如果directory有值 if directory: # 如果指定目录不存在,抛出异常 if not os.path.exists(directory): raise...ValueError(f'{directory} does`t exist') # 如果directory不是一个目录,抛出异常 if not os.path.isdir(directory

    65830

    高频面试题整理(二)

    ,但可以处理存量任务 stop:不再接收新提交的任务,也不处理存量任务 Tidying:所有 的任务都已终止 TERMINATED:terminated()方法执行后进入该状态 线程的大小如何选定?...程序无法处理的系统错误,编译器不做任何检查 Exception:程序可以处理的异常,捕获后可能恢复 总结:前者是程序无法处理的错误,后者是程序可以处理的异常 Java异常的处理原则 具体明确:抛出的的异常应该能通过异常类名和...message准确说明异常的类型和产生异常的原因; 提早抛出:应尽可能早的发现并抛出异常,便于精确定位问题; 延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常 高效主流的异常处理框架...在catch之后,抛出上述异常的子类,并提供足以定位的信息 由前端接收AppException做统一处理 Java异常处理消耗异常的地方 try-catch代码块影响JVM的优化 异常对象实列需要保存堆栈快照等信息...节点,如果没有则使用CAS进行添加(链表的头节点),添加失败则进入下次循环 检查到内部正在扩容,就帮助他一块扩容 如果 f !

    13610

    会用python把linux命令写一遍的人,进大厂有多容易?

    的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力呢?...2. usage: 显示这个命令用法, 一般用来显示参数的用法 3. description:显示这个命令的帮助信息 4. epilog: 显示命令的帮助信息,位置在参数的下面 argparse.ArgumentParser.add_argument..., help='是否显示隐藏文件') parser.add_argument('-d', '--directory', help='指定显示的目录,如果不指定,默认为当前目录') parser.add_argument...# 如果directory有值 if directory: # 如果指定目录不存在,抛出异常 if not os.path.exists(directory): raise...ValueError(f'{directory} does`t exist') # 如果directory不是一个目录,抛出异常 if not os.path.isdir(directory

    61420

    关于Flutter 2.5稳定版你知道多少?

    4010 [camera] 在 iOS 上不触发平放时的设备方向 4158 [camera] 修复 iOS 上设置焦点和曝光点的坐标旋转 4197 [camera] 修复相机预览在设备方向改变时不总是重建的问题...有了这个新功能,DevTools 可以检测到你因着色器编译而丢失的构建帧,以帮助你修复这个问题。...,更容易启动配置,编辑器的改进 v3.23 配置文件模式的改进,改进依赖关系树,改进 LSP 在以前的 Flutter 版本中,你可能会被那些你不希望处理的异常所困扰,你可能希望它们触发调试器并找出它们的源头...在这个版本中,调试器现在可以正确地中断未处理的异常,而以前这些异常只是被框架捕获 (#17007)。这改善了调试的体验,调试器现在可以直接指向异常在代码中的抛出行,而不是指向框架深处的一个随机位置。...与之相关的一个新功能是你能够决定 FutureBuilder 是否应该重新抛出或隐藏错误 (#84308)。这应该会给你提供更多的异常,以帮助你追踪 Flutter 应用中的问题。

    3.7K20

    如何利用Python学习linux命令?

    没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力呢?...2. usage: 显示这个命令用法, 一般用来显示参数的用法 3. description:显示这个命令的帮助信息 4. epilog: 显示命令的帮助信息,位置在参数的下面 argparse.ArgumentParser.add_argument..., help='是否显示隐藏文件') parser.add_argument('-d', '--directory', help='指定显示的目录,如果不指定,默认为当前目录') parser.add_argument...# 如果directory有值 if directory: # 如果指定目录不存在,抛出异常 if not os.path.exists(directory): raise...ValueError(f'{directory} does`t exist') # 如果directory不是一个目录,抛出异常 if not os.path.isdir(directory

    81510

    引脚数据提示编辑代码并继续调试(C#,VB,C ++)编辑XAML代码并继续调试调试难以重现的问题配置数据以显示在调试器中更改执行流程跟踪范围外的对象(C#,Visual Basic)查看函数的返回值

    调试难以重现的问题 如果在您的应用程序中重新创建特定状态很困难或很耗时,请考虑使用条件断点是否有帮助。...如果您对其他类型的条件感兴趣,请在“断点设置”对话框中选择“过滤器”而不是“条件表达式”,然后按照过滤器提示进行操作。...然后,使用F5或step命令继续运行该应用程序。 通过更改执行流程,您可以执行诸如测试不同代码执行路径或重新运行代码之类的操作,而无需重新启动调试器。...更加熟悉调试器如何附加到您的应用程序(C#,C ++,Visual Basic,F#) 要附加到正在运行的应用程序,调试器将加载与要调试的应用程序完全相同的内部版本生成的符号(.pdb)文件。...在某些情况下,对符号文件的一些了解可能会有所帮助。您可以使用“模块”窗口检查Visual Studio如何加载符号文件。 在调试时,通过选择“调试”>“ Windows”>“模块”,打开“模块”窗口。

    4.5K41

    Dubbo服务如何优雅的校验参数

    因此对于参数校验不合法的情况,服务调用方自然不希望服务端抛出一大段包含堆栈信息的异常信息,而是希望还保持这种统一的返回形式,就如下面这种返回所示: Dubbo接口服务端配置: { "code":...1001, "msg": "用户名不能为空", "data": null } 3.1 ValidationFilter & JValidator 想要做到返回格式的统一,我们先来看下前面所抛出的异常是如何来的...而Validator接口在Dubbo框架中实现只有JValidator,这个通过idea工具显示Validator所有实现的UML类图可以看出(如下图所示),当然调试代码也可以很轻松定位到。...3.2 自定义参数校验异常返回 从前一小节我们可以很清晰的了解到了为什么会抛出那样的异常信息给调用方,如果想做到我们前面想要的诉求:统一返回格式,我们需要按照下面的步骤去实现。...(Validator)并没有指定,当然是可以像「注2」中那样直接指定校验器,但考虑到自定义注解有可能是直接暴露在facade包中,而具体的校验器的实现有时候会包含一些业务依赖,所以不建议直接在此处指定,

    1.5K10

    C# 基础知识系列- 15 异常处理篇

    这是因为C#的机制,并不强制性声明方法会抛出异常。也就是说,C#的异常可以在合适的地方处理也可以不处理。...换句话就是,在异常类继承树中,越是靠近Exception的异常类越是最后catch,在所有可能的异常处理中,Exception最后处理。...1.2 如何抛出一个异常 在上一节我们简单介绍了一下如何处理异常,这一节我们演示一下如何抛出一个异常。...1.3 如何创建一个自定义异常 在简单演示了如何处理异常和如何抛出异常之后,我们来看看如何自定义一个异常类。...这里是我自己总结的一个异常处理的哲学: 不是必须的场景,不要抛出异常 底层异常不要直接抛给上层方法 在程序编写的期间,预估一些场景,并对这些场景做数据校验和提示,而不是使用异常 在捕获异常时,最好编写相应的处理逻辑

    95220

    了解了这些,轻松拿offer——Java面试之道

    方法被抛出相应的异常以便调用者能处理。...在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,在web开发中的POJO中,...Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果...运行时异常如果在函数内被抛出,在函数上不需要声明。 不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。...)、notify( )、notifyAll( )只能在同步方法或同步代码块中使用; sleep()必须捕获异常,而wait( )、notify( )、notifyAll( )不用 Java中如何实现序列化

    41820

    Github Trending榜首|阿里开源Java在线诊断工具Arthas

    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?...的继承树,urls,类加载信息 classloader 命令将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等。...服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而被不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 的命令也不会引起任何原有业务逻辑的改变。...watch 方法执行数据观测 让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。...这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。 于是乎,TimeTunnel 命令就诞生了。 options 全局开关 ?

    1.1K21

    【Java】已解决:java.awt.HeadlessException

    在Java开发中,java.awt.HeadlessException是一种常见的异常,尤其是在处理图形界面(GUI)相关的代码时。这种异常通常会在没有可用显示设备的环境中运行图形应用程序时抛出。...本文将详细分析该异常的背景、可能的出错原因,并提供错误和正确的代码示例,帮助开发者解决这一问题。...如果代码在不支持图形界面的环境(例如服务器端应用程序或无显示器的计算机)中运行,就可能抛出此异常。 场景示例: 一个典型的触发场景是在服务器端生成图形界面或处理图像时。...HeadlessException 在上述代码中,如果程序运行在一个无头(headless)的环境中,例如Linux服务器而没有连接显示设备,那么调用frame.setVisible(true);时就会抛出...二、可能出错的原因 导致java.awt.HeadlessException的原因主要包括: 无头环境:在没有图形显示设备的环境中(如某些服务器或命令行模式)运行需要图形界面支持的代码时,会抛出此异常。

    64310
    领券